Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Les requêtes XPath peuvent inclure des espaces de noms. Si les éléments de schéma sont qualifiés pour l’espace de noms (autrement dit, s’ils incluent un espace de noms cible), les requêtes XPath sur le schéma doivent spécifier cet espace de noms.
Étant donné que l’utilisation du caractère générique (*) n’est pas prise en charge dans SQLXML 4.0, vous devez spécifier la requête XPath à l’aide d’un préfixe d’espace de noms. Pour résoudre ce préfixe, utilisez la propriété espaces de noms pour spécifier la liaison d’espace de noms.
Dans l’exemple suivant, la requête XPath spécifie des espaces de noms à l’aide du caractère générique (*) et des fonctions XPath de nom local () et d’namespace-uri(). Cette requête XPath retourne tous les éléments où se trouve Contact le nom local et l’URI de l’espace urn:myschema:Contactsde noms .
/*[local-name() = 'Contact' and namespace-uri() = 'urn:myschema:Contacts']
Dans SQLXML 4.0, cette requête XPath doit être spécifiée avec un préfixe d’espace de noms. Par exemple x:Contact, où x est le préfixe d’espace de noms. Considérez le schéma XSD suivant :
<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>
Étant donné que ce schéma définit l’espace de noms cible, une requête XPath (telle que « Employee ») sur le schéma doit inclure l’espace de noms.
Il s’agit d’un exemple d’application Microsoft Visual Basic qui exécute une requête XPath (x :Employee) sur le schéma XSD précédent. Pour résoudre le préfixe, la liaison d’espace de noms est spécifiée à l’aide de la propriété namespaces.
Remarque
Dans le code, vous devez fournir le nom de l’instance de SQL Server dans la chaîne de connexion. En outre, cet exemple spécifie l’utilisation de SQL Server Native Client (SQLNCLI11) pour le fournisseur de données, ce qui nécessite l’installation d’un logiciel client réseau supplémentaire. Pour plus d’informations, consultez Configuration système requise pour 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
Pour tester cette application
Enregistrez l’exemple de schéma XSD dans un dossier.
Créez un projet exécutable Visual Basic et copiez-y le code. Modifiez le chemin d’accès du répertoire spécifié selon les besoins.
Ajoutez la référence de projet suivante :
"Microsoft ActiveX Data Objects 2.8 Library"Exécutez l’application.
Voici le résultat partiel :
<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"/>
Les préfixes générés dans le document XML sont arbitraires, mais ils sont mappés au même espace de noms.