Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
XPath-Abfragen können Namespaces enthalten. Wenn die Schemaelemente namespace qualifiziert sind (d. h., wenn sie einen Zielnamespace enthalten), müssen XPath-Abfragen für das Schema diesen Namespace angeben.
Da die Verwendung des Platzhalterzeichens (*) in SQLXML 4.0 nicht unterstützt wird, müssen Sie die XPath-Abfrage mithilfe eines Namespacepräfixes angeben. Um dieses Präfix zu beheben, verwenden Sie 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 Contact und der Namespace-URI ist urn:myschema:Contacts.
/*[local-name() = 'Contact' and namespace-uri() = 'urn:myschema:Contacts']
In SQLXML 4.0 muss diese XPath-Abfrage mit einem Namespacepräfix angegeben werden. 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 das Schema den Namespace enthalten.
Dies ist eine Beispielanwendung für Microsoft Visual Basic, die eine XPath-Abfrage (x:Employee) für das vorherige XSD-Schema ausführt. Zum Auflösen des Präfixes wird die Namespacebindung mithilfe der Namespaces-Eigenschaft angegeben.
Hinweis
Im Code müssen Sie den Namen der Instanz von SQL Server in der Verbindungszeichenfolge angeben. Außerdem gibt dieses Beispiel die Verwendung des SQL Server Native Client (SQLNCLI11) für den Datenanbieter an, der zusätzliche Netzwerkclientsoftware installiert werden muss. Weitere Informationen finden Sie unter Systemanforderungen für SQL Server 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=SQLNCLI11;Data Source=SqlServerName;Initial Catalog=AdventureWorks;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
So testen Sie diese Anwendung
Speichern Sie das XSD-Beispielschema in einem Ordner.
Erstellen Sie ein ausführbares Visual Basic-Projekt, und kopieren Sie den Code in das Projekt. Ändern Sie den angegebenen Verzeichnispfad entsprechend.
Fügen Sie die folgende Projektreferenz hinzu:
"Microsoft ActiveX Data Objects 2.8 Library"Führen Sie die Anwendung aus.
Dies ist das Teilergebnis:
<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"/>
Die Präfixe, die im XML-Dokument generiert werden, sind beliebig, weisen jedoch demselben Namespace zu.