2013-04-17 13 views
21

In XML di seguito:come selezionare il valore dell'attributo di un nodo in 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> 

ho bisogno di ottenere alcuna del cliente, che è un attributo. In XPath So che è /company/customers/customer/@cno, in XQuery ho provato sotto espressione, ma non ha funzionato per me:

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

XQuery utilizza XPath normale; il tuo tentativo funziona per me. Cosa ti offre 'return $ c'? – Tomalak

+0

Sto usando il software EditX per questo, ma mostra l'errore "Impossibile creare un nodo attributo il cui genitore è nodo del documento." Per favore fammi sapere in quale strumento provi questo, quindi posso passare a quello strumento. Potrebbe essere il problema specifico dello strumento. –

+0

possibile duplicato di [Utilizzo di XQuery/XPath per ottenere il valore dell'attributo del nodo principale di un elemento] (http://stackoverflow.com/questions/2166014/using-xquery-xpath-to-get-the-attribute-value-of -an-elements-parent-node) – Tomalak

risposta

40

Si consiglia di utilizzare i dati per prendere valore di attributo: -

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

È può anche utilizzare string per ottenere il valore dell'attributo:

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

Sono stato in grado di farlo funzionare dove non è stato incluso nel wrapping in data(). Penso che sia perché il mio parser è strettamente precedente xpath/xquery. –

Problemi correlati