Sdílet prostřednictvím


Spouštění dotazů XPath s názvovými prostory (spravované SQLXML třídy)

platí pro:SQL Serverazure SQL Database

XPath dotazy mohou obsahovat jmenné prostory. Pokud jsou prvky schématu kvalifikované pro jmenný prostor (použijte cílový jmenný prostor), XPath musí specifikovat jmenný prostor XPath vůči tomuto schématu.

Protože zástupce znaku (*) není v Microsoft SQLXML 4.0 podporován, musíte dotaz XPath zadat pomocí prefixu jmenného prostoru. Pro vyřešení prefixu použijte vlastnost jmenných prostorů k určení vazby jmenného prostoru.

V následujícím příkladu dotaz XPath specifikuje jmenné prostory pomocí zástupce znaku (*) a funkcí localname() a namespace-uri() XPath. Tento dotaz XPath vrací všechny prvky, kde lokální název je Employee a URI jmenného prostoru urn:myschema:Contacts:

/*[local-name() = 'Contact' and namespace-uri() = 'urn:myschema:Contacts']  

V SQLXML 4.0 specifikujte tento dotaz XPath pomocí prefixu jmenného prostoru. Příkladem je x:Contact, kde x je prefix jmenného prostoru. Uvažujme následující schéma XSD:

<schema xmlns="http://www.w3.org/2001/XMLSchema"  
            xmlns:sql="urn:schemas-microsoft-com:mapping-schema"  
            xmlns:con="urn:myschema:Contacts"  
            targetNamespace="urn:myschema:Contacts">  
<complexType name="ContactType">  
  <attribute name="CID" sql:field="ContactID" type="ID"/>  
  <attribute name="FName" sql:field="FirstName" type="string"/>  
  <attribute name="LName" sql:field="LastName"/>   
</complexType>  
<element name="Contact" type="con:ContactType" sql:relation="Person.Contact"/>  
</schema>  

Protože toto schéma definuje cílový jmenný prostor, dotaz XPath (například "Employee") proti tomuto schématu musí obsahovat tento jmenný prostor.

Následující ukázková aplikace v C# provádí dotaz XPath proti předchozímu schématu XSD (MySchema.xml). Pro vyřešení prefixu zadejte vazbu jmenného prostoru pomocí vlastnosti Namespaces objektu SqlXmlCommand.

Poznámka:

V kódu musíte v řetězci spojení uvést název instance SQL Serveru.

using System;  
using Microsoft.Data.SqlXml;  
using System.IO;  
class Test  
{  
      static string ConnString = "Provider=SQLOLEDB;Server=(local);database=AdventureWorks;Integrated Security=SSPI";  
      public static int testXPath()  
      {  
         //Stream strm;  
         SqlXmlCommand cmd = new SqlXmlCommand(ConnString);  
         cmd.CommandText = "x:Contact[@CID='1']";  
         cmd.CommandType = SqlXmlCommandType.XPath;  
         cmd.RootTag = "ROOT";  
         cmd.Namespaces = "xmlns:x='urn:myschema:Contacts'";  
         cmd.SchemaPath = "MySchema.xml";  
         using (Stream strm = cmd.ExecuteStream()){  
            using (StreamReader sr = new StreamReader(strm)){  
               Console.WriteLine(sr.ReadToEnd());  
            }  
         }  
         return 0;  
      }  
      public static int Main(String[] args)  
      {  
         testXPath();  
         return 0;  
      }  
   }  

Pro testování tohoto příkladu musíte mít na počítači nainstalovaný Microsoft .NET Framework.

Otestování aplikace

  1. Uložte XSD schéma (MySchema.xml), které je v tomto příkladu uvedeno, do složky.

  2. Uložit C# kód (DocSample.cs), který je uveden v tomto příkladu, do stejné složky, ve které je schéma uloženo. (Pokud soubory uložíte do jiné složky, budete muset upravit kód a zadat vhodnou cestu k adresáři pro mapovací schéma.)

  3. Zkompilujte kód. Pro kompilaci kódu v příkazovém řádku použijte:

    csc /reference:Microsoft.Data.SqlXML.dll DocSample.cs  
    

    Tím vzniká spustitelný soubor (DocSample.exe).

  4. V příkazovém řádku spusťte DocSample.exe.