Freigeben über


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

XPath-Abfragen können Namespaces enthalten. Wenn die Schemaelemente namespacefähig sind (verwenden Sie einen Zielnamespace), müssen die XPath-Abfragen für das Schema den 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. Verwenden Sie zum Auflösen des Präfixes die Namespaces-Eigenschaft, um die Namespacebindung anzugeben.

Im folgenden Beispiel gibt die XPath-Abfrage Namespaces mithilfe des Platzhalterzeichens (*) und der XPath-Funktionen local-name() und namespace-uri() an. Diese XPath-Abfrage gibt alle Elemente zurück, in denen sich der lokale Name befindet Employee und der Namespace-URI lautet urn:myschema:Contacts:

/*[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 hierfür ist x:Contactx das Namespacepräfix. Betrachten Sie das folgende 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 eine XPath-Abfrage mit dem vorherigen XSD-Schema (MySchema.xml) aus. Geben Sie zum Auflösen des Präfixes die Namespacebindung mithilfe der Namespaces-Eigenschaft des SqlXmlCommand-Objekts an.

Hinweis

Im Code müssen Sie den Namen der Instanz 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 müssen Sie microsoft .NET Framework auf Ihrem Computer installiert haben.

So testen Sie die Anwendung

  1. Speichern Sie das XSD-Schema (MySchema.xml), das in diesem Beispiel in einem Ordner bereitgestellt wird.

  2. Speichern Sie den C#-Code (DocSample.cs), der in diesem Beispiel im selben Ordner bereitgestellt wird, 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 folgendes, um den Code an der Eingabeaufforderung zu kompilieren:

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

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

  4. Führen Sie an der Eingabeaufforderung DocSample.exeaus.