Ausführen von XPath-Abfragen mit Namespaces (Verwaltete SQLXML-Klassen)
Gilt für: SQL Server Azure 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. 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, bei denen der lokale Name "Employee" ist 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. 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 SQL Server-Instanz im 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
Speichern Sie das oben in diesem Beispiel bereitgestellte XSD-Schema (MySchema.xml) in einem Ordner.
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.)
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.
Führen Sie DocSample.exe an der Eingabeaufforderung aus.