Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:programu SQL Server
Azure SQL Database
Zapytania XPath mogą zawierać przestrzenie nazw. Jeśli elementy schematu są kwalifikowane do przestrzeni nazw (użyj docelowej przestrzeni nazw), zapytania XPath do schematu muszą określić przestrzeń nazw.
Ponieważ znak dziki (*) nie jest obsługiwany w Microsoft SQLXML 4.0, musisz określić zapytanie XPath za pomocą prefiksu przestrzeni nazw. Aby rozwiązać prefiks, użyj właściwości przestrzeni nazw, aby określić przypisanie przestrzeni nazw.
W poniższym przykładzie zapytanie XPath określa przestrzenie nazw za pomocą znaku dzikego (*) oraz funkcji local-name() i namespace-uri() XPath. To zapytanie XPath zwraca wszystkie elementy, gdzie lokalna nazwa to Pracownik, a URI przestrzeni nazw to urn:myschema:Kontakty:
/*[local-name() = 'Contact' and namespace-uri() = 'urn:myschema:Contacts']
W SQLXML 4.0 określ to zapytanie XPath z prefiksem przestrzeni nazw. Przykładem jest x:Contact, gdzie x jest prefiksem przestrzeni nazw. Rozważmy następujący schemat 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>
Ponieważ ten schemat definiuje docelową przestrzeń nazw, zapytanie XPath (np. "Employee") do tego schematu musi zawierać tę przestrzeń nazw.
Poniższa przykładowa aplikacja C# wykonuje zapytanie XPath względem poprzedniego schematu XSD (MySchema.xml). Aby rozwiązać prefiks, określ powiązanie przestrzeni nazw, używając właściwości Namespaces obiektu SqlXmlCommand.
Uwaga / Notatka
W kodzie musisz podać nazwę instancji SQL Server w ciągu połączeń.
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;
}
}
Aby przetestować ten przykład, musisz mieć zainstalowany Microsoft .NET Framework na swoim komputerze.
Aby przetestować aplikację
Zapisz schemat XSD (MySchema.xml), który jest udostępniony w tym przykładzie, w folderze.
Zapisz kod C# (DocSample.cs), który jest udostępniony w tym przykładzie, w tym samym folderze, w którym przechowywany jest schemat. (Jeśli przechowujesz pliki w innym folderze, będziesz musiał edytować kod i określić odpowiednią ścieżkę katalogu dla schematu mapowania.)
Skompiluj kod. Aby skompilować kod w wierszu poleceń, użyj następująco:
csc /reference:Microsoft.Data.SqlXML.dll DocSample.csTworzy to plik wykonywalny (DocSample.exe).
W wierszu poleceń wykonaj DocSample.exe.