Freigeben über


Ausführen von XPath-Abfragen mit Namespaces (Verwaltete SQLXML-Klassen)

Gilt für:SQL ServerAzure SQL-Datenbank

XPath-Abfragen können Namespaces enthalten. Wenn die Schemaelemente mit Namespace angegeben wurden (einen Zielnamespace verwenden), dann müssen mit diesem Schema ausgeführte XPath-Abfragen diesen Namespace angeben.

Da das Platzhalterzeichen (*) in Microsoft SQLXML 4.0 nicht unterstützt wird, müssen Sie die XPath-Abfrage mithilfe eines Namespacepräfixes angeben. Um das Präfix aufzulösen, verwenden Sie die namespaces-Eigenschaft, um die Namespacebindung anzugeben.

Im folgenden Beispiel gibt die XPath-Abfrage Namespaces an, indem sie das Platzhalterzeichen (*) und die XPath-Funktionen local-name() und namespace-uri() verwendet. Diese XPath-Abfrage gibt alle Elemente zurück, bei denen der lokale Name Employee und der Namespace-URI urn:myschema:Contacts lautet:

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

Geben Sie in SQLXML 4.0 diese XPath-Abfrage mit einem Namespacepräfix an. Ein Beispiel ist x:Contact, wobei x das Namespacepräfix ist. Betrachten Sie folgendes XSD-Schema:

<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>  

Da dieses Schema den Zielnamespace definiert, muss eine XPath-Abfrage (z. B. "Employee") für dieses Schema den Namespace enthalten.

Die folgende C#-Beispielanwendung führt mit dem angegebenen XSD-Schema (MySchema.xml) eine XPath-Abfrage aus. Um das Präfix aufzulösen, geben Sie die Namespacebindung mithilfe der Namespaces-Eigenschaft des SqlXmlCommand-Objekts an.

Hinweis

Im Code müssen Sie den Namen des instance von SQL Server in der Verbindungszeichenfolge angeben.

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;  
      }  
   }  

Zum Testen dieses Beispiels muss die Microsoft .NET Framework auf Ihrem Computer installiert sein.

So testen Sie die Anwendung

  1. Speichern Sie das oben in diesem Beispiel bereitgestellte XSD-Schema (MySchema.xml) in einem Ordner.

  2. Speichern Sie den C#-Code (DocSample.cs), der in diesem Beispiel bereitgestellt wird, in demselben Ordner, in dem das Schema gespeichert ist. (Wenn Sie die Dateien in einem anderen Ordner speichern, müssen Sie den Code bearbeiten und den entsprechenden Verzeichnispfad für das Zuordnungsschema angeben.)

  3. Kompilieren Sie den Code. Verwenden Sie zur Kompilierung des Codes an der Eingabeaufforderung die folgende Zeichenfolge:

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

    Dadurch wird eine ausführbare Datei (DocSample.exe) erstellt.

  4. Führen Sie DocSample.exe an der Eingabeaufforderung aus.