2016-05-23 41 views
0

这里是我想要检索值的xml。使用xpath,当节点包含多个值时如何获取特定的xml节点值?

<dsml> 
<entries> 
<entry dn="uid=7686,c=in,ou=pages,o=example.com"> 
<att name="uid"> 
<value>7568766</value> 
<value>756876634</value> 
</att><att name="callname"> 
<value>jhsadkjh</value> 
<value>jhsadkjhakjdgakj</value> 
</att></entry> 
</entries> 
</dsml> 

正如您所看到的,每个属性都有2个值与它关联。我只想取第一个。 下面是一些XPath的我已经使用:

//dsml/entries/entry/att[@name = 'uid']/value[1] 
//dsml/entries/entry/att[@name = 'uid']/value/[1] 

但它总是抛出异常。

+1

_But它总是抛出exception._ - 添加异常到你的问题将是一个很大的帮助。 –

+1

@Loic M.不要更改用户提供的代码或标记,除非您确定自己正确地代表了OP的意图而不影响手头的问题;在这种情况下,你不能也不应该做出这样的改变。回滚。 – kjhughes

+0

@ DanielHaley ..抛出的异常是exceptionjavax.xml.transform.TransformerException:在'/'或'//'标记之后,预期会出现位置步骤。 –

回答

2

此XPath从名为“ATT”每个标签只获取第二个“价值”标签:

//dsml/entries/entry/att/value[1] 

,或者,如果你只想从“uid”中获取“值”,你可以使用:

//dsml/entries/entry/att[@name='uid']/value[1] 
+0

对于* // dsml/entries/entry/att [@ name ='uid']/value [1] *,我得到“NullException” –

+0

我在这里测试过:http://www.freeformatter.com/xpath -tester.html 它在那里正常工作。 –

0

attattr是不一样的元素。另外,</enteries>不能关闭<entries>

下在xsh工作对我来说:

/dsml/entries/entry/att[@name = 'uid']/value[1] 
0

您正在使用不同的名称相同的元素。作为开放标签的entries和作为结束标签的enteries。这些名称应该相同。此外,在XML元素的名称是att,以及XPath你正在努力寻找attr