获取 XML 节点属性值

Posted

技术标签:

【中文标题】获取 XML 节点属性值【英文标题】:Get XML Node attribute value 【发布时间】:2014-04-09 12:13:32 【问题描述】:

我有一个 XML

<MT5 v="1.0.0">
  <L>
    <PKL>115</PKL>
    <DID>c4c0fee0cb7bc70755d0c996e02431ed6e36f5b0031108</DID>
    <OCD>2014-04-07T17:13:45</OCD>
    <DDT>2014-04-07T17:13:45</DDT>
    <D>
      <PKD o="1">1001</PKD>
      <PKD o="2">1002</PKD>
    </D>
  </L>
</MT5>

我需要获得如下价值 PKL PKD O 115 1001 1 115 1002 2

我正在使用下面的查询来获取数据,但没有得到如何选择 'O' 的值

SELECT  @xmldoc2.value('(/MT5/L/PKL)[1]', 'int' ) AS PKL,
   L.PKD.value('.', 'int') AS PKD,
   'Dont konw how to pick value of o' AS O

FROM 
   @xmldoc2.nodes('MT5/L/D/PKD') L(PKD)

我该怎么做?

【问题讨论】:

感谢安蒂编辑 【参考方案1】:
select L.N.value('(PKL/text())[1]', 'int') as PKL,
       P.N.value('text()[1]', 'int') as PKD,
       P.N.value('@o', 'int') as O
from @xmldoc2.nodes('/MT5/L') as L(N)
  cross apply L.N.nodes('D/PKD') as P(N)

SQL Fiddle

【讨论】:

感谢您的帮助(Mikael)【参考方案2】:

在以下节点中:

<PKD o="2">1002</PKD>

“o”是一个属性。在 XPath 中,您可以使用 @ 符号来引用属性。 @o。在您的完整示例中,您只需向 XML value 方法提供属性引用即可选择“o”。

SELECT  
  @xmldoc2.value('(/MT5/L/PKL)[1]', 'int' ) AS PKL,
  L.PKD.value('.', 'int') AS PKD,
  L.PKD.value('@o', 'int') AS O,
FROM 
@xmldoc2.nodes('MT5/L/D/PKD') L(PKD)

【讨论】:

以上是关于获取 XML 节点属性值的主要内容,如果未能解决你的问题,请参考以下文章

获取 XML 节点的属性值

【求助】Dom4j 生成xml,节点增加属性时,属性值中有特殊字符,如何做到不转义

获取 XML 节点属性值

JS获取XML节点值

Xpath 获取父节点,其中子节点的两个属性具有特定值

java解析xml文件,会把节点属性中的换行转换成空格,怎样才能避免此类转换,即保留换行