Wykonywanie kwerend XPath z przestrzeniami nazw (Dostawca SQLXMLOLEDB)
Kwerendy XPath należą przestrzenie nazw.Jeśli elementy schematu są kwalifikowane w obszarze nazw (to znaczy, jeśli zawierają one miejsce docelowe nazw), kwerend XPath względem schematu należy określić ten obszar nazw.
Ponieważ symbol wieloznaczny (*) nie jest obsługiwane w wersji 4.0 SQLXML, należy określić kwerendę XPath przy użyciu prefiks obszaru nazw.Aby rozwiązać ten prefiks, użyj namespaces właściwość, aby określić obszar nazw powiązanie.
W poniższym przykładzie kwerenda XPath określa obszary nazw przy użyciu symbol wieloznaczny (*) i local-name() i namespace-uri() funkcje XPath.Ta kwerenda XPath zwraca wszystkie elementy, w których jest lokalną nazwą Contact i obszaru nazw URI jest urn:myschema:Contacts.
/*[local-name() = 'Contact' and namespace-uri() = 'urn:myschema:Contacts']
SQLXML 4.0 tę kwerendę XPath musi być określona z prefiks obszaru nazw.Przykładem jest x:Contact, gdzie x jest prefiks obszaru nazw.Rozważmy następujące schematu 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="BusinessEntityID" 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.Person"/>
</schema>
Ponieważ ten schemat definiuje miejsce docelowe nazw kwerendę XPath (takie jak "pracownik") względem schematu musi zawierać obszar nazw.
Jest to próbka Microsoft aplikacji Visual Basic, który wykonuje kwerendę XPath (x: pracownik) przeciwko poprzedniego schematu XSD.Aby rozwiązać prefiks obszaru nazw powiązanie jest określana za pomocą namespaces właściwość.
Ostrzeżenie
W kodzie, musisz podać nazwę wystąpienie SQL Server w połączeniu z ciąg.W tym przykładzie określa także, korzystanie z SQL Server Native klient (SQLNCLI10) dla dostawca danych, który wymaga dodatkowych sieci klient oprogramowania instalowanego.Aby uzyskać więcej informacji, zobacz Wymagania systemowe dla programu SQL Server 2008 R2 Native Client.
Option Explicit
Private Sub Form_Load()
Dim con As New ADODB.Connection
Dim cmd As New ADODB.Command
Dim stm As New ADODB.Stream
con.Open "provider=SQLXMLOLEDB.4.0;Data Provider=SQLNCLI10;Data Source=SqlServerName;Initial Catalog=AdventureWorks2008R2;Integrated Security=SSPI;"
Set cmd.ActiveConnection = con
stm.Open
cmd.Properties("Output Stream").Value = stm
cmd.Properties("Output Encoding") = "utf-8"
cmd.Properties("Mapping schema") = "C:\DirectoryPath\con-ex.xml"
cmd.Properties("namespaces") = "xmlns:x='urn:myschema:Contacts'"
' Debug.Print "Set Command Dialect to DBGUID_XPATH"
cmd.Dialect = "{ec2a4293-e898-11d2-b1b7-00c04f680c56}"
cmd.CommandText = "x:Contact"
cmd.Execute , , adExecuteStream
stm.Position = 0
Debug.Print stm.ReadText(adReadAll)
End Sub
Aby przetestować tę aplikację
Schematu XSD próbki należy zapisać w folderze.
Tworzenie pliku wykonywalnego projektu Visual Basic i skopiuj kod do niego.Zmień ścieżka określonego katalogu.
Dodaj następujące odwołanie projektu:
"Microsoft ActiveX Data Objects 2.8 Library"Wykonanie wniosku.
Jest to wynik częściowy:
<y0:Employee xmlns:y0="urn:myschema:Contacts"
LName="Achong" CID="1" FName="Gustavo"/>
<y0:Employee xmlns:y0="urn:myschema:Employees"
LName="Abel" CID="2" FName="Catherine"/>
Prefiksy, które są generowane w dokumencie XML są dowolne, ale mapowania tego samego obszaru nazw.
Aby uzyskać informacje dotyczące określania miejsce docelowe obszar nazw w schematy XDR Zobacz Określanie docelowego obszaru nazw przy użyciu sql:miejsce docelowe-nazw (schematu XDR).