Как выбрать атрибут родительского узла и его дочерние значения, используя XML и Xquery? - PullRequest
1 голос
/ 18 октября 2010

У меня есть это:

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

Мне нужно выбрать "Атрибут родительского узла m и значения a1-a2 a в одном запросе. Я пробовал это, но это не работает:

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)

Спасибо заранее.

Ответы [ 2 ]

0 голосов
/ 31 июля 2011
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 голосов
/ 18 октября 2010

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

Используйте

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

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

...