Megosztás a következőn keresztül:


XPath-lekérdezések végrehajtása névtérekkel (FELÜGYELT SQLXML-osztályok)

A következőkre vonatkozik:SQL ServerAzure SQL Database

Az XPath lekérdezések tartalmazhatnak névtereket. Ha a séma elemek névtér-minősítésűek (célnévteret használnak), az XPath lekérdezéseknek a sémához kell megadniuk a névteret.

Mivel a vaker karakter (*) nem támogatott a Microsoft SQLXML 4.0-ban, az XPath lekérdezést névtér előtaggal kell megadnod. A prefix feloldásához használja a namespaces tulajdonságot a névtér kötelékének megadására.

A következő példában az XPath lekérdezés a névtereket a vadkártya (*) karakter, valamint a local-name() és namespace-uri() XPath függvények használatával határozza meg. Ez az XPath lekérdezés minden olyan elemet visszaad, ahol a helyi név Alkalmazott , és a névtér URI urn:myschema:Contacts:

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

Az SQLXML 4.0-ban megadjuk ezt az XPath lekérdezést névtér előtaggal. Erre példa az x:Contact (x:Contact), ahol x a névtér előtagja. Vegyük figyelembe a következő XSD sémát:

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

Mivel ez a séma határozza meg a célnévteret, egy XPath lekérdezésnek (például "Alkalmazott") ehhez a sémához kell csatolnia a névteret.

A következő C# mintaalkalmazás XPath lekérdezést hajt végre az előző XSD séma (MySchema.xmlellen). Az előtag feloldásához a névtér kötését a SqlXmlCommand objektum Namespaces tulajdonságával határozzuk meg.

Megjegyzés:

A kódban meg kell adnod az SQL Server példányának nevét a kapcsolati láncban.

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;  
      }  
   }  

A példát tesztelni a Microsoft .NET Framework-nek be kell telepítenie a számítógépére.

Az alkalmazás tesztelése

  1. Mentsd el az ebben a példában található XSD sémát (MySchema.xml) egy mappában.

  2. Mentsük el a C# kódot (DocSample.cs), amely ebben a példában található, ugyanabba a mappába, ahol a séma tárolható. (Ha a fájlokat egy másik mappában tárolod, akkor szerkesztened kell a kódot, és meg kell határoznod a megfelelő könyvtár útvonalat a leképezési sémához.)

  3. Fordítsd le a kódot. A kód fordításához a parancssorban a következőket használjuk:

    csc /reference:Microsoft.Data.SqlXML.dll DocSample.cs  
    

    Ez egy futtatható fájlt (DocSample.exelétrehoz ).

  4. A parancssorban hajtsd végre DocSample.exe.