2010-10-18 4 views
1

J'ai ceci:.Comment choisir l'attribut de nœud parent et ses valeurs enfants en utilisant XML et Xquery?

<pss> 
<ps n="А parent node" m="654564654" t="435,8551" a="2857,2716"> 
     <sc s="a1" a="25,4220"/> 
     <sc s="a2" a="0"/> 
     <sc s="a3" a="2395,9945"/> 
</ps> 
... 
</pss> 

je dois sélectionner « attribut nœud parent А m et a1-a2 a des valeurs dans une requête j'ai essayé cela, mais cela ne fonctionne pas:

SELECT ps.value('@m', 'nvarchar(50)') "parent node", 
--  sc.value('@a1', 'nvarchar(50)') "название услуги", 
--  sc.value('@a2', 'nvarchar(50)') "стоимость услуги", 
     ps.value('@a3, 'nvarchar(50)') "b"," 
FROM mts.dbo.bill 
OUTER APPLY xCol.nodes('//Report/rp/pss/ps') AS A(ps) 
OUTER APPLY xCol.nodes('//Report/rp/pss/ps/sc/.') AS B(sc) 

Thanx à l'avance.

Répondre

0

Il n'y a pas a1, a2 ou a3 attributs dans le document XML fourni!

Utilisation:

/pss/ps/@*[name(.)='n' or name(.)='m'] 
| 
    /pss/ps/sc/@a 

Ceci est l'expression XPath qui sélectionne les nœuds recherchés à partir du document XML fourni. Je ne suis pas sûr comment il devrait être combiné dans une commande SQL.

+0

thanx, mais ERREUR: XQuery [mts.dbo.bill.xCol.nodes()]: Il n'y a pas de fonction « {} http://www.w3.org/2004/07/xpath-functions :prénom()'. –

+0

"Il n'y a pas d'attributs a1, a2 ou a3 dans le document XML fourni!" - Ceci est l'attribut "s" de noeud, désolé –

+0

@Kai: Ma réponse est en XPath pur 1.0 - vous n'avez pas spécifié XQuery comme une balise !. Maintenant, j'ai mis à jour la réponse et il fonctionnera à la fois dans XPath 1.0 et XPath 2.0 (XQuery est un sur-ensemble de XPath 2.0). –

0
declare @document xml 
set @document = N' 
<pss> 
    <ps n="А parent node" m="654564654" t="435,8551" a="2857,2716"> 
      <sc s="a1" a="25,4220"/> 
      <sc s="a2" a="0"/> 
      <sc s="a3" a="2395,9945"/> 
    </ps> 
</pss>' 


select 
    pses.ps.value(N'@m', N'NVARCHAR(10)') 
    , scs.sc.value(N'@s', N'NVARCHAR(2)') 
from 
    @document.nodes(N'//ps') pses(ps) 
cross apply 
    pses.ps.nodes(N'//sc') scs(sc) 
+0

Et qu'est-ce que c'est supposé faire? – nalply

Questions connexes