Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op:SQL Server
Azure SQL Database
XPath-queries kunnen namespaces bevatten. Als de schema-elementen namespace-gekwalificeerd zijn (gebruik een doelnamespace), moeten de XPath-queries tegen het schema de namespace specificeren.
Omdat het wildcard-teken (*) niet wordt ondersteund in Microsoft SQLXML 4.0, moet je de XPath-query specificeren door een namespace-prefix te gebruiken. Om het prefix op te lossen, gebruik je de eigenschap namespaces om de namespace-binding te specificeren.
In het volgende voorbeeld specificeert de XPath-query namespaces door gebruik te maken van het jokerteken (*) en de local-name() en namespace-uri() XPath-functies. Deze XPath-query geeft alle elementen terug waarbij de lokale naam Employee is en de namespace-URI urn:myschema:Contacts:
/*[local-name() = 'Contact' and namespace-uri() = 'urn:myschema:Contacts']
In SQLXML 4.0 specificeer je deze XPath-query met een namespace-prefix. Een voorbeeld is x:Contact, waarbij x het naamruimtevoorvoegsel is. Beschouw het volgende 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>
Omdat dit schema de doelnaamruimte definieert, moet een XPath-query (zoals "Werknemer") tegen dit schema de naamruimte bevatten.
De volgende C#-voorbeeldapplicatie voert een XPath-query uit tegen het voorgaande XSD-schema (MySchema.xml). Om het prefix op te lossen, specificeer je de namespace-binding door gebruik te maken van de Namespaces-eigenschap van het SqlXmlCommand-object.
Opmerking
In de code moet je de naam van de instantie van SQL Server in de verbindingsreeks opgeven.
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;
}
}
Om dit voorbeeld te testen, moet je het Microsoft .NET Framework op je computer hebben geïnstalleerd.
De toepassing testen
Sla het XSD-schema (MySchema.xml) dat in dit voorbeeld wordt gegeven op in een map.
Sla de C#-code (DocSample.cs) die in dit voorbeeld wordt gegeven op in dezelfde map waarin het schema is opgeslagen. (Als je de bestanden in een andere map opslaat, moet je de code bewerken en het juiste directorypad voor het mappingschema opgeven.)
Compileer de code. Om de code in de opdrachtprompt te compileren, gebruik u:
csc /reference:Microsoft.Data.SqlXML.dll DocSample.csDit creëert een uitvoerbaar bestand (DocSample.exe).
Voer bij de opdrachtprompt DocSample.exeuit.