2013-04-17 13 views
21

W poniższej XML:Jak wybrać wartość atrybutu węzła w XQuery?

<company> 
    <customers> 
    <customer cno="2222"> 
      <cname>Charles</cname> 
      <street>123 Main St.</street> 
      <city>Wichita</city> 
      <zip>67226</zip> 
      <phone>316-636-5555</phone> 
     </customer> 
     <customer cno="1000"> 
      <cname>Bismita</cname> 
      <street>Ashford Dunwoody</street> 
      <city>Wichita</city> 
      <zip>67226-1555</zip> 
      <phone>000-000-0000</phone> 
     </customer>  
    </customers> 
</company> 

Muszę nr klienta, który jest atrybutem. W XPath wiem, że jest /company/customers/customer/@cno w XQuery Próbowałem poniżej wypowiedzi, ale nie działa dla mnie:

for $c in /company/customers/customer 
return $c/@cno 
+0

XQuery używa zwykłego XPath; twoja próba działa dla mnie. Co daje ci 'return $ c'? – Tomalak

+0

Używam do tego oprogramowania EditX, ale pokazuje błąd "Nie można utworzyć węzła atrybutu, którego rodzicem jest węzeł dokumentu." Czy możesz mi powiedzieć, w jakim narzędziu to wypróbujesz, więc mogę przełączyć się na to narzędzie. Może to być problem specyficzny dla narzędzia. –

+0

możliwy duplikat [Używanie XQuery/XPath do uzyskania wartości atrybutu węzła nadrzędnego elementu] (http://stackoverflow.com/questions/2166014/using-xquery-xpath-to-get-the- attribute-value-of -an-elements-parent-node) – Tomalak

Odpowiedz

40

należy używać danych, aby wybrać wartość atrybutu: -

for $c in /company/customers/customer 
return data($c/@cno) 
10

You może również użyć wartości , aby uzyskać wartość atrybutu:

for $c in /company/customers/customer 
    return $c/@cno/string() 
+0

Udało mi się to uruchomić, gdy zawijanie go w dane() nie zadziałało. Myślę, że to dlatego, że mój analizator składni jest ściśle starszy xpath/xquery. –

Powiązane problemy