Köra XPath-frågor med namnområden (SQLXML Managed Classes)

gäller för:SQL ServerAzure SQL Database

XPath-frågor kan inkludera namnrymder. Om schemaelementen är namespace-kvalificerade (använd ett målnamnrymd) måste XPath-frågorna mot schemat specificera namespace.

Eftersom jokersymbolen (*) inte stöds i Microsoft SQLXML 4.0 måste du specificera XPath-frågan genom att använda ett namnrymdsprefix. För att lösa prefixet, använd egenskapen namespaces för att specificera namespace-bindningen.

I följande exempel specificerar XPath-frågan namnrymder genom att använda jokersymbolen (*) samt funktionerna local-name() och namespace-uri() XPath. Denna XPath-fråga returnerar alla element där det lokala namnet är Employee och namnrymdens URI är urn:myschema:Contacts:

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

I SQLXML 4.0, ange denna XPath-fråga med ett namnrymdsprefix. Ett exempel är x:Kontakt, där x är namnrymdsprefixet. Betrakta följande 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>  

Eftersom detta schema definierar målnamnrymden måste en XPath-fråga (såsom "Anställd") mot detta schema inkludera namnrymden.

Följande C#-exempelapplikation kör en XPath-fråga mot det föregående XSD-schemat (MySchema.xml). För att lösa prefixet, specificera namnrymdsbindningen genom att använda egenskapen Namespaces i objektet SqlXmlCommand.

Anmärkning

I koden måste du ange namnet på instansen av SQL Server i anslutningssträngen.

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

För att testa detta exempel måste du ha Microsoft .NET Framework installerat på din dator.

Testa programmet

  1. Spara XSD-schemat (MySchema.xml) som ges i detta exempel i en mapp.

  2. Spara C#-koden (DocSample.cs) som ges i detta exempel i samma mapp där schemat lagras. (Om du lagrar filerna i en annan mapp måste du redigera koden och ange lämplig katalogsökväg för mappningsschemat.)

  3. Komplisera koden. För att kompilera koden i kommandoprompten, använd:

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

    Detta skapar en exekverbar fil (DocSample.exe).

  4. Vid kommandoprompten, utför DocSample.exe.