XML取节点名称与节点值实例

原帖:http://blog.csdn.net/htl258/archive/2010/04/16/5493691.aspx

 

declare @x xml

set @x = '

<ROOT>

  <SM>

  <SMID>88</SMID>

  <SMCD>A5</SMCD>

  <SMNM> 刘洋 </SMNM>

  <NDS>

  <ND>

  <SF>3</SF>

  <NDID>88</NDID>

  <NDCD>A5</NDCD>

  <NDNM> 林林 </NDNM>

  <CDST>

  <tR1>1</tR1>

  <tR2>2</tR2>

  <tR3>3</tR3>

  <tR4>4</tR4>

  <tR5>5</tR5>

  <tR6>6</tR6>

  <tR7>7</tR7>

  <tR8>8</tR8>

  <tR9>9</tR9>

  <tt2>1</tt2>

  <tt130>2</tt130>

  <t132>3</t132>

  <t155>4</t155>

  </CDST>

  </ND>

  </NDS>

  </SM>

  <SM>

  <SMID>84</SMID>

  <SMCD>A6</SMCD>

  <SMNM> 陈真 </SMNM>

  <NDS>

  <ND>

  <SF>3</SF>

  <NDID>84</NDID>

  <NDCD>A6</NDCD>

  <NDNM> 陈真 </NDNM>

  <CDST>

  <tR2>9</tR2>

  <tR3>8</tR3>

  <tR4>7</tR4>

  <tR5>6</tR5>

  <tR6>5</tR6>

  <tR7>4</tR7>

  <tR8>3</tR8>

  <tR9>2</tR9>

  <t12dd>1</t12dd>

  <tt2>2</tt2>

  <tt130>3</tt130>

  <t132>4</t132>

  <t155>5</t155>

  </CDST>

  </ND>

  </NDS>

  </SM>

  <SM>

  <SMID>45</SMID>

  <SMCD>D1</SMCD>

  <SMNM> 曹曹 </SMNM>

  <NDS>

  <ND>

  <SF>3</SF>

  <NDID>45</NDID>

  <NDCD>D1</NDCD>

  <NDNM> 曹曹 </NDNM>

  <CDST>

  <tR2>1</tR2>

  </CDST>

  </ND>

  </NDS>

  </SM>

</ROOT>'

 

--按照<NDID>节点的值取出其下<CDST>节点中所有的节点名称
--如: NDID节点值为84(<NDID>84</NDID>)
 

SELECT t . x . value ( 'local-name(.)' , 'varchar(200)' ) as 节点名称 ,

    t . x . value ( '.' , 'varchar(200)' ) AS 节点值

FROM @x . nodes ( '//ND[./NDID = "84"]/CDST/*' ) as t ( x );

/*

节点名称 节点值

tR2    9

tR3    8

tR4    7

tR5    6

tR6    5

tR7     4

tR8     3

tR9     2

t12dd  1

tt2    2

tt130  3

t132   4

t155   5

*/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您可以使用Java自带的DOM解析器来解析XML字符串,并使用XPath表达式来定位相同名称节点。具体代码如下: ```java String xml = "<root><person><name>张三</name><age>18</age></person><person><name>李四</name><age>20</age></person></root>"; DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); InputSource inputSource = new InputSource(new StringReader(xml)); Document document = builder.parse(inputSource); XPathFactory xPathFactory = XPathFactory.newInstance(); XPath xPath = xPathFactory.newXPath(); String expression = "//person/name"; NodeList nodeList = (NodeList) xPath.compile(expression).evaluate(document, XPathConstants.NODESET); for (int i = 0; i < nodeList.getLength(); i++) { Node node = nodeList.item(i); System.out.println("第" + (i + 1) + "个名字:" + node.getTextContent()); } ``` 上述代码中,我们首先定义了一个XML字符串`xml`,然后使用DOM解析器将其解析成一个`Document`实例。接着,我们使用XPath表达式`//person/name`来定位所有名称为`name`的节点,并将它们保存在一个`NodeList`中。最后,我们使用循环遍历`NodeList`,并使用`getTextContent()`方法获每个节点。 以上代码输出的结果为: ``` 第1个名字:张三 第2个名字:李四 ``` 注意,上述代码中的XPath表达式中的`//`表示在整个文档中查找匹配的节点,而不是仅在当前节点的子节点中查找。如果您只想在当前节点的子节点中查找匹配的节点,可以使用单个斜杠`/`。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值