Sdílet prostřednictvím


Spouštění dotazů XPath s názvovými prostory (poskytovatel SQLXMLOLEDB)

platí pro:SQL Serverazure SQL Database

XPath dotazy mohou obsahovat jmenné prostory. Pokud jsou prvky schématu kvalifikované pro jmenný prostor (tedy pokud obsahují cílový jmenný prostor), musí dotazy XPath proti tomuto schématu specifikovat tento jmenný prostor.

Protože použití znaku žolíku (*) není v SQLXML 4.0 podporováno, musíte dotaz XPath specifikovat pomocí prefixu jmenného prostoru. Pro vyřešení této předpony použijte vlastnost jmenných prostorů k určení vazby jmenného prostoru.

V následujícím příkladu dotaz XPath specifikuje jmenné prostory pomocí zástupce znaku (*) a funkcí localname() a namespace-uri() XPath. Tento dotaz XPath vrací všechny prvky, kde lokální název je Contact a URI jmenného prostoru urn:myschema:Contacts.

/*[local-name() = 'Contact' and namespace-uri() = 'urn:myschema:Contacts']  

V SQLXML 4.0 musí být tento dotaz XPath specifikován prefixem jmenného prostoru. Příkladem je x:Contact, kde x je prefix jmenného prostoru. Uvažujme následující schéma 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>  

Protože toto schéma definuje cílový jmenný prostor, dotaz XPath (například "Employee") proti tomuto schématu musí obsahovat jmenný prostor.

Toto je ukázková aplikace Microsoft Visual Basic, která vykonává dotaz XPath (x:Employee) proti předchozímu schématu XSD. Pro vyřešení prefixu je vazba jmenného prostoru specifikována pomocí vlastnosti jmenných prostorů.

Poznámka:

V kódu musíte v řetězci spojení uvést název instance SQL Serveru. Tento příklad také specifikuje použití SQL Server Native Client (SQLNCLI11) pro poskytovatele dat, což vyžaduje instalaci dalšího síťového klientského softwaru. Pro více informací viz Systémové požadavky pro 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  

Pro testování této aplikace

  1. Uložte ukázkové XSD schéma do složky.

  2. Vytvořte spustitelný projekt ve Visual Basicu a zkopírujte do něj kód. Změňte podle potřeby zadanou cestu k adresáři.

  3. Přidejte následující odkaz na projekt:

    "Microsoft ActiveX Data Objects 2.8 Library"  
    
  4. Spusťte aplikaci.

Toto je částečný výsledek:

<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"/>  

Prefixy generované v XML dokumentu jsou libovolné, ale mapují se na stejný jmenný prostor.