Udostępnij przez


Określanie oś w kroku wyrażenie ścieżka

oś krok w ścieżka wyrażenie zawiera następujące składniki:

Aby uzyskać więcej informacji zobacz Wyrażenie ścieżka (XQuery).

Implementacja XQuery w SQL Server obsługuje następujące kroki oś

Description

podrzędność

Zwraca elementy podrzędne węzła kontekstu.

obiektu podrzędnego

Zwraca wszystkie elementy podrzędne węzła kontekstu.

nadrzędny

Zwraca obiekt nadrzędny węzeł kontekstu.

atrybut

Zwraca atrybuty węzeł kontekstu.

samodzielnie

Zwraca sam węzeł kontekstu.

obiektu podrzędnego lub automatycznej

Zwraca węzeł kontekstu i wszystkie elementy podrzędne węzła kontekstu.

Wszystkie te oś, z wyjątkiem nadrzędny oś, są osie do przodu.The parent oś is a reverse oś, because it searches backward in the document hierarchy.Na przykład wyrażenie ścieżka względnej child::ProductDescription/child::Summary składa się z dwóch kroków, a każdy krok określa child oś. Pierwszym krokiem pobiera <ProductDescription> elementy podrzędne elementu węzła kontekstu. Dla każdego <ProductDescription> pobiera krok drugi węzeł elementu <Podsumowanie> elementy podrzędne węzła elementu.

Wyrażenie ścieżka względnej child::root/child::Location/attribute::LocationID, składa się z trzech kroków. Pierwsze dwa kroki każdego określić child Określa, osi, a trzeci krok attribute oś. Podczas wykonywania przed instrukcje wytwarzania dokumentów XML w Production.ProductModelZwraca wartość wyrażenie tabela LocationID atrybut <Lokalizacja> element podrzędność węzeł <katalog główny> element.

Przykłady

Przykładowe kwerendy, w tym temacie podano przed XML kolumny typu AdventureWorks bazy danych.Aby uzyskać informacje na temat tych kolumn zobacz xml Data Type Representation in the AdventureWorks Database.

A.Określanie oś podrzędność

Dla określonego modelu produktu, następujące kwerendy pobiera <Funkcje> elementy podrzędne węzła elementu <ProductDescription> węzeł elementu z opis katalogu produktów, które są przechowywane w Production.ProductModel Tabela.

SELECT CatalogDescription.query('
declare namespace PD="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";
  /child::PD:ProductDescription/child::PD:Features')
FROM Production.ProductModel
WHERE ProductModelID=19

Pierwszy przycisk jest przyciskiem domyślnym.

  • The query() metoda of the xml data type specifies the ścieżka wyrażenie.

  • Określ obie czynności w wyrażeniu ścieżka child oś, a nazwy węzłów ProductDescription i Features, jako węzeł testów. Aby uzyskać informacje na temat testów węzła zobacz Określanie test węzła w kroku wyrażenie ścieżka.

B.Określanie elementów podrzędnych i obiektu podrzędnego lub automatycznej

W poniższym przykładzie użyto osi elementów podrzędnych i obiektu podrzędnego lub samodzielnie.Kwerendy, w tym przykładzie jest określona względem XML typu zmiennej.Wystąpienie XML jest uproszczone w celu łatwego ilustrują różnicę w wygenerowanym wyniki.

declare @x xml
set @x='
<a>
 <b>text1
   <c>text2
     <d>text3</d>
   </c>
 </b>
</a>'
declare @y xml
set @y = @x.query('
  /child::a/child::b
')
select @y

W wyniku następujące wyrażenie zwróci <b> element podrzędność węzeł <a> węzeł elementu:

<b>text1
   <c>text2
     <d>text3</d>
   </c>
</b>

W tym wyrażeniu po określeniu elementów podrzędnych oś dla wyrażenie ścieżka

/child::a/child::b/descendant::*, użytkownik jest proszony o podanie wszystkich obiektów podrzędnych <b> węzeł elementu.

Gwiazdka ** testu węzła reprezentuje nazwę węzła testu węzła.W związku z tym typ węzła głównego elementów podrzędnych oś, węzeł elementu Określa typy węzłów zwracane.Oznacza to, że wszystkie węzły element zwraca wartość wyrażenieTekst węzły nie są zwracane.Aby uzyskać więcej informacji na temat typu podstawowego węzła i jej związek z test węzła zobacz Określanie test węzła w kroku wyrażenie ścieżka temat.

Węzły elementu <c> i <d> zwracane są, jak pokazano w następującym wynikiem:

<c>text2
     <d>text3</d>
</c>
<d>text3</d>

Jeśli określisz oś obiektu podrzędnego lub automatycznej zamiast elementów podrzędnych oś /child::a/child::b/descendant-or-self::* Węzeł kontekstu zwraca element <b>, a jego obiektu podrzędnego.

To jest wynik:

<b>text1
   <c>text2
     <d>text3</d>
   </c>
</b>

<c>text2
     <d>text3</d>
</c>

<d>text3</d> 

W następującej kwerendzie przykładowej przed AdventureWorks bazy danych pobiera wszystkie węzły podrzędność elementu podrzędnego elementu <Features> <ProductDescription> elementu:

SELECT CatalogDescription.query('
declare namespace PD="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";
  /child::PD:ProductDescription/child::PD:Features/descendant::*
')
FROM  Production.ProductModel
WHERE ProductModelID=19

C.Określanie oś nadrzędna

Następujące kwerendy zwraca <Summary> element podrzędność elementu <ProductDescription> element dokumentu XML wykazu produktów przechowywane w Production.ProductModel Tabela.

W tym przykładzie użyto oś nadrzędna, aby powrócić do elementu nadrzędnego <Feature> element i pobieranie <Summary> element podrzędność elementu <ProductDescription> element.

SELECT CatalogDescription.query('
declare namespace PD="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";
  
/child::PD:ProductDescription/child::PD:Features/parent::PD:ProductDescription/child::PD:Summary
')
FROM   Production.ProductModel
WHERE  ProductModelID=19 
 

W tym przykładzie kwerendy wykorzystuje wyrażenie ścieżka parent oś. Jak pokazano poniżej, można napisać ponownie wyrażenie bez oś nadrzędna:

  /child::PD:ProductDescription[child::PD:Features]/child::PD:Summary

W następującym przykładzie podano bardziej użyteczne przykład oś nadrzędna.

Każdy opis wykazu modelu produktu, przechowywane w CatalogDescription kolumnaProductModel tabela ma <ProductDescription> element, który ma ProductModelID atrybut i <Features> element podrzędność, jak pokazano w następującym fragmencie:

<ProductDescription ProductModelID="..." >
  ...
  <Features>
    <Feature1>...</Feature1>
    <Feature2>...</Feature2>
   ...
</ProductDescription>

Zmienna sterująca ustawia kwerendy $f, w instrukcja FLWOR zwraca elementy podrzędne elementu <Features> element. Aby uzyskać więcej informacji zobaczInstrukcja FLWOR i iteracji (XQuery).Dla każdej funkcji return Klauzula konstrukcji XML w następującej postaci:

<Feature ProductModelID="...">...</Feature>
<Feature ProductModelID="...">...</Feature>

Aby dodać ProductModelID dla każdego <Feature> element, parent określono oś:

SELECT CatalogDescription.query('
declare namespace PD="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";
declare namespace wm="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain";
  for $f in /child::PD:ProductDescription/child::PD:Features/child::*
  return
   <Feature
     ProductModelID="{ ($f/parent::PD:Features/parent::PD:ProductDescription/attribute::ProductModelID)[1]}" >
          { $f }
   </Feature>
')
FROM  Production.ProductModel
WHERE ProductModelID=19

Jest to wynik częściowy:

<Feature ProductModelID="19">
  <wm:Warranty 
   xmlns:wm="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain">
    <wm:WarrantyPeriod>3 years</wm:WarrantyPeriod>
    <wm:Description>parts and labor</wm:Description>
  </wm:Warranty>
</Feature>
<Feature ProductModelID="19">
  <wm:Maintenance 
   xmlns:wm="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain">
    <wm:NoOfYears>10 years</wm:NoOfYears>
    <wm:Description>maintenance contract available through your dealer 
                  or any AdventureWorks retail store.</wm:Description>
  </wm:Maintenance>
</Feature>
<Feature ProductModelID="19">
  <p1:wheel 
   xmlns:p1="https://www.adventure-works.com/schemas/OtherFeatures">
      High performance wheels.
  </p1:wheel>
</Feature>

Należy zauważyć, że predykat [1] w ścieżce wyrażenie jest dodawany do zapewnienia, że zwracana jest pojedyncza wartość.