Udostępnij przez


Wykonywanie kwerend XPath z przestrzeniami nazw (SQLXML zarządzane klasy)

Kwerendy XPath należą przestrzenie nazw.Jeśli elementy schematu są kwalifikowane nazw (za pomocą miejsce docelowe nazw), kwerend XPath względem schematu należy określić obszar nazw.

Symbol wieloznaczny (*) nie jest obsługiwane na Microsoft SQLXML 4.0, należy określić kwerendę XPath przy użyciu prefiks obszaru nazw.Aby rozwiązać prefiks, użyj namespaces właściwość, aby określić obszar nazw powiązanie.

W poniższym przykładzie kwerenda XPath określa obszary nazw przy użyciu symbol wieloznaczny (*) i local-name() i namespace-uri() funkcje XPath.Ta kwerenda XPath zwraca wszystkie elementy, w których jest lokalną nazwą Employee i obszaru nazw URI jest urn:myschema:Contacts:

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

SQLXML 4.0 określić tę kwerendę XPath prefiks obszaru nazw.Przykładem jest x:Person, gdzie x jest prefiks obszaru nazw.Rozważmy następujące schematu 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:Contact">
<complexType name="ContactType">
  <attribute name="CID" sql:field="BusinessEntityID" type="ID"/>
  <attribute name="FName" sql:field="FirstName" type="string"/>
  <attribute name="LName" sql:field="LastName"/> 
</complexType>
<element name="Person" type="con:PersonType" sql:relation="Person.Person"/>
</schema>

Ponieważ ten schemat definiuje miejsce docelowe nazw kwerendę XPath (takie jak "pracownik") wobec tego schematu musi zawierać obszar nazw.

Następująca aplikacja przykładowa C# wykonuje kwerendę XPath przeciwko poprzedniego schematu XSD (MySchema.xml).Aby rozwiązać prefiks, określić obszar nazw powiązanie za pomocą Namespaces Właściwość SqlXmlCommand obiektu.

Ostrzeżenie

W kodzie, musisz podać nazwę wystąpienie SQL Server w połączeniu z ciąg.

using System;
using Microsoft.Data.SqlXml;
using System.IO;
class Test
{
      static string ConnString = "Provider=SQLOLEDB;Server=(local);database=AdventureWorks2008R2;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:ContactsContact'";
         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;
      }
   }

Aby przetestować aplikację

  1. Upewnij się, że Microsoft .NET Framework jest zainstalowana na komputerze.Aby przetestować ten przykład jest wymagane.

  2. Zapisywanie schematu XSD (MySchema.xml), który jest dostarczany w tym przykładzie w folderze.

  3. Zapisz kod C# (DocSample.cs) dostarczonego w tym przykładzie w tym samym folderze, w którym przechowywany jest schemat.(Jeśli pliki są przechowywane w innym folderze, będzie trzeba edytować kod i określ ścieżka katalogu właściwe dla mapowania schematu.)

  4. Skompiluj kod.Aby skompilować kod w wiersz polecenia, należy użyć zapisu:

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

    Tworzy plik wykonywalny (DocSample.exe).

  5. W wiersz polecenia wykonać DocSample.exe.