2010-10-18 2 views
1

у меня есть это:.Как выбрать атрибут родительского узла и его дочерние значения с помощью XML и 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> 

нужно выбрать «атрибут А родительский узел м и a1 a2-а значения в одном запросе я попытался это, но он не работает:

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 заранее.

ответ

0

Там нет a1, a2 или a3 атрибутов в XML предоставленного документе!

Использование:

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

Это выражение XPath, который выбирает разыскиваемые узлы из предоставленного документа XML. Я не уверен, как его следует объединить в команду SQL.

+0

Thanx, но ERROR: XQuery [mts.dbo.bill.xCol.nodes()]: Там нет функции «{http://www.w3.org/2004/07/xpath-functions} :имя()'. –

+0

«В предоставленном XML-документе нет атрибутов a1, a2 или a3!» - это атрибут «s» узел, извините –

+0

@Kai: Мой ответ в чистом XPath 1.0 - вы не указали XQuery как тег !. Теперь я обновил ответ, и он будет работать как в XPath 1.0, так и в XPath 2.0 (XQuery - это надмножество 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

И что это должно было сделать? – nalply

Смежные вопросы