Udostępnij przez


Określanie test węzła 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).

Test węzła jest warunek i krok drugi składnik na oś w ścieżka wyrażenia.Wszystkie węzły wybranego w kroku musi spełniać tego warunku.Wyrażenie ścieżka /child::ProductDescription, jest test węzła ProductDescription. W tym kroku pobiera tylko te dzieci węzeł elementu, które są których nazwy są ProductDescription.

Warunek testu węzła mogą być następujące:

  • Nazwa węzła.Zwracane są tylko węzły typu główny węzeł o określonej nazwie.

  • Typ węzła.Zwracane są tylko węzły określonego typu.

Uwaga

Nazwy węzła, które są określone w wyrażeniach ścieżka XQuery nie podlegają tej samej reguły liter sortowanie języka Transact-SQL kwerendy są i zawsze jest uwzględniana wielkość liter.

Nazwa węzeł jako węzeł test

Podczas określania nazwy węzła w węźle przetestować w kroku wyrażenie ścieżka, należy zrozumieć pojęcie rodzaju węzła głównego.Każdej oś, podrzędność, nadrzędnego lub atrybut, ma typ węzła głównego.Na przykład:

  • Oś atrybut może zawierać tylko atrybuty.W związku z tym węzłem atrybut jest typu główny węzeł oś atrybut.

  • Dla drugiej osi Jeśli węzły zaznaczone przez oś może zawierać węzły elementu, element jest typu główny węzeł na tej osi.

Po określeniu nazwy węzła jako test węzła w kroku zwraca następujące typy węzłów:

  • Węzły areof tego rodzaju węzła głównego na oś.

  • Węzły, które mają taką samą nazwę, jak określono w test węzła.

Na przykład należy wziąć pod uwagę następujące wyrażenie ścieżka:

child::ProductDescription 

Określa wyrażenie drodze jednoetapowego child oś i nazwa węzła ProductDescription jako test węzła. Wyrażenie zwraca tylko węzły, które są tego rodzaju węzła głównego na oś podrzędność węzły elementów, których ProductDescription jak ich nazwy.

Wyrażenie ścieżka /child::PD:ProductDescription/child::PD:Features/descendant::*, składa się z trzech kroków. Te kroki należy określić osi podrzędność i obiektu podrzędnego.W każdym kroku nazwa węzła jest określony jako test węzła.(Znak wieloznaczny*) w trzecim kroku wskazuje wszystkie węzły tego rodzaju węzeł Zasady dla elementów podrzędnych oś. Węzeł główny rodzaj oś określa rodzaj węzły zaznaczone i filtry nazwy węzła wybranego węzłów.

W wyniku po wyrażenie to jest wykonywane przed dokumentami XML katalogu produktów w ProductModel tabela, pobiera wszystkie podrzędność węzła elementu < funkcje > elementu węzłów podrzędność elementu > < ProductDescription.

Wyrażenie ścieżka /child::PD:ProductDescription/attribute::ProductModelID, składa się z dwóch kroków. Oba te kroki określić nazwę węzła jako test węzła.Ponadto drugi krok używa oś atrybut.Dlatego każdy krok wybiera węzłów typu główny węzeł oś o nazwie określonej jako test węzła.W efekcie wyrażenie zwraca ProductModelIDWęzeł atrybut węzeł elementu ProductDescription > < .

Przy określaniu nazw węzłów do węzła testów, umożliwia także z symbolem wieloznacznym ** można określić nazwę lokalnego węzła lub jego prefiksu obszaru nazw, jak pokazano w poniższym przykładzie:

declare @x xml
set @x = '
<greeting xmlns="ns1">
   <salutation>hello</salutation>
</greeting>
<greeting xmlns="ns2">
   <salutation>welcome</salutation>
</greeting>
<farewell xmlns="ns1" />'
select @x.query('//*:greeting')
select @x.query('declare namespace ns="ns1"; /ns:*')

Typ węzeł jako węzeł test

Dla węzła typu innego niż element węzłów kwerendy za pomocą testu typu węzła.Jak pokazano w poniższej tabela, istnieją cztery prób typu węzła dostępne.

Typ węzła

Zwraca wartość

Przykład

comment()

Wartość true dla węzła komentarz.

following::comment() Zaznacza wszystkie węzły komentarzy pojawiające się po węzeł kontekstu.

node()

Wartość true dla węzła wszelkiego rodzaju.

preceding::node() Zaznacza wszystkie węzły, które pojawiają się przed węzeł kontekstu.

processing-instruction()

Wartość true dla węzła instrukcji przetwarzania.

self::processing instruction() powoduje zaznaczenie wszystkich węzłów instrukcji przetwarzania w węźle kontekstu.

text()

Wartość true dla węzła tekstu.

child::text() wybiera węzłów tekstowych, które są elementy podrzędne węzła kontekstu.

Jeśli określony typ węzła, na przykład text() lub comment()..., jako test węzła, do kroku po prostu zwraca węzłów określonego rodzaju, niezależnie od węzła głównego rodzaj oś.Na przykład następujące wyrażenie ścieżka zwraca tylko podrzędny węzeł komentarz węzła kontekstu:

child::comment()

Podobnie, /child::ProductDescription/child::Features/child::comment() pobiera komentarz elementy podrzędność węzła <Funkcje> element podrzędność węzeł <ProductDescription> węzeł elementu.

Przykłady

W poniższych przykładach porównać nazwy węzła i rodzaju węzła.

A.Wyniki określający nazwę węzła i typu węzeł jako węzeł testy w ścieżce wyrażenie

W poniższym przykładzie prosty dokument XML jest przypisany do XML typu zmiennej.Dokument jest kwerendy przy użyciu wyrażeń inną ścieżka.Następnie porównuje się wyniki.

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

To wyrażenie poprosi o podanie węzły podrzędne elementu <b> węzeł elementu.

(Znak gwiazdki*) w węźle test wskazuje symbol wieloznaczny dla nazwy węzła. Podrzędne oś ma węzeł elementu, jak jego rodzaj węzła głównego.W efekcie wyrażenie zwraca wszystkie węzły podrzędne elementu węzeł elementu <b>. To jest element węzłów <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ś potomkiem lub self zamiast określać elementów podrzędnych oś, węzeł kontekstu jest zwracany i również jego elementy podrzędne:

/child::a/child::b/descendant-or-self::*

To wyrażenie zwraca węzeł elementu <b> i jego węzły podrzędne elementu. W zwracać węzły podrzędne, rodzaj oś obiektu podrzędnego lub samodzielnie, element węzła typu węzeł główny określa, jakiego rodzaju węzły są zwracane.

To jest wynik:

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

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

<d>text3</d> 

Poprzedniego wyrażenie użyć symbolu wieloznacznego jako nazwę węzła.Zamiast tego można użyć node() Funkcja jako pokaz w tym wyrażenie:

/child::a/child::b/descendant::node()

Ponieważ wartość node() jest typu węzła, otrzymasz wszystkie węzły osi potomnej.To jest wynik:

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

Ponownie Jeśli określono oś obiektu podrzędnego lub automatycznej i node() jako test węzła otrzyma wszystkich obiektów podrzędnych, elementy, węzły tekstu i również węzeł kontekstu <b> element.

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

B.Określanie nazwy węzła w test węzła

W następującym przykładzie określono nazwę węzła w węzeł testu w wyrażeniach ścieżka.W rezultacie wszystkie wyrażenia zwraca węzły węzeł główny rodzaj oś, która ma nazwę węzła, określoną w test węzła.

Następujące kwerendy zwraca wyrażenie <Warranty> element z dokumentu XML wykazu produktów przechowywane w Production.ProductModel Tabela:

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";
 /child::PD:ProductDescription/child::PD:Features/child::wm:Warranty
')
FROM Production.ProductModel
WHERE ProductModelID=19

Pierwszy przycisk jest przyciskiem domyślnym.

  • The namespace keyword in the XQuery prolog defines a prefix that is used in the query body.Aby uzyskać więcej informacji dotyczących prologu XQuery zobacz Prolog XQuery .

  • Wszystkie trzy kroki wyrażenie ścieżka jako test węzła określić oś podrzędność i nazwa węzła.

  • Nie określono części opcjonalny krok — kwalifikator kroku oś w jednym z kroków w wyrażeniu.

Kwerenda zwraca <Warranty> elementy podrzędność elementu <Features> element podrzędność elementu <ProductDescription> element.

To jest wynik:

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

W następującej kwerendzie wyrażenie ścieżka Określa (znak do symboli wieloznacznych*) w przypadku testu węzła.

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";
 /child::PD:ProductDescription/child::PD:Features/child::*
')
FROM Production.ProductModel
WHERE ProductModelID=19

Symbol wieloznaczny określono nazwę węzła.W efekcie kwerenda zwraca wszystkich elementów elementy podrzędność węzła <Features> element podrzędność węzeł <ProductDescription> węzeł elementu.

Następująca kwerenda jest podobna do poprzedniej kwerendy z tą różnicą, że wraz z symbolem wieloznacznym, jest określony obszar nazw.W rezultacie zwracane są wszystkie dzieci węzeł elementu w tym obszarze nazw.Należy zauważyć, że <Features> element może zawierać elementy z różnymi obszarami nazw.

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";
 /child::PD:ProductDescription/child::PD:Features/child::wm:*
')
FROM Production.ProductModel
WHERE ProductModelID=19

Symbol wieloznaczny można użyć jako prefiksu obszaru nazw, jak to pokazano w tej kwerendzie:

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";
 /child::PD:ProductDescription/child::PD:Features/child::*:Maintenance
')
FROM Production.ProductModel
WHERE ProductModelID=19

Ta kwerenda zwraca <Maintenance> element elementów podrzędnych węzłów w wszystkie obszary nazw z dokumentu XML katalog produktów.

C.Określanie rodzaju węzła w test węzła

W przykładzie poniżej następuje określenie rodzaju węzeł jako węzeł testu w wyrażeniach ścieżka.W rezultacie wszystkie wyrażenia zwraca węzłów typu określonego w test węzła.

W następującej kwerendzie wyrażenie ścieżka Określa rodzaj węzła w jego trzeci krok:

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";
 /child::PD:ProductDescription/child::PD:Features/child::text()
')
FROM Production.ProductModel
WHERE ProductModelID=19

W następnej kwerendzie poniżej określono:

  • Wyrażenie ścieżka składa się z trzech kroków oddzielone (znak do kreski ułamkowej/).

  • Każdy z tych kroków określa oś podrzędność.

  • Dwie pierwsze kroki określ nazwę węzła jako test węzła, a trzeci krok określa rodzaj węzeł jako test węzła.

  • Wyrażenie zwraca tekst, elementy podrzędność węzła <Features> element podrzędność elementu <ProductDescription> węzeł elementu.

Jest zwracany tylko jeden węzeł tekstu.To jest wynik:

These are the product highlights. 

Następująca kwerenda zwraca elementy podrzędne węzła komentarz <ProductDescription> element:

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";
 /child::PD:ProductDescription/child::comment()
')
FROM Production.ProductModel
WHERE ProductModelID=19

Pierwszy przycisk jest przyciskiem domyślnym.

  • Drugim krokiem określa rodzaj węzeł jako test węzła.

  • W rezultacie wyrażenie zwraca komentarz elementy podrzędne węzła <ProductDescription> węzły elementu.

To jest wynik:

<!-- add one or more of these elements... one for each specific product in this product model -->
<!-- add any tags in <specifications> -->    

Następująca kwerenda pobiera węzłów najwyższego poziom, instrukcję przetwarzania:

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";
 /child::processing-instruction()
')
FROM Production.ProductModel
WHERE ProductModelID=19

To jest wynik:

<?xml-stylesheet href="ProductDescription.xsl" type="text/xsl"?> 

Można przekazać parametr literał ciąg do processing-instruction() test węzła. W takim wypadku kwerenda zwraca instrukcje przetwarzania, w których wartość atrybut nazwy jest literałem ciąg określonego w argumencie.

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";
 /child::processing-instruction("xml-stylesheet")
')
FROM Production.ProductModel
WHERE ProductModelID=19

defaultButton

Poniżej wymieniono określone ograniczenia

  • Rozszerzone testy węzła SequenceType nie są obsługiwane.

  • processing-instruction(Name) nie jest obsługiwana.Zamiast tego należy umieścić nazwę w cudzysłów.