java搜索特定节点后的第一个匹配元素(XPath和ITunes XML)
没有必要发布我的完整代码,因为我只有一些简短的问题。我正在XML文档中使用XPath搜索文本值。我有一个类似XML的
<key>Name</key>
<string>Dat Ass</string>
<key>Artist</key>
<string>Earl Sweatshirt</string>
<key>Album</key>
<string>Kitchen Cutlery</string>
<key>Kind</key>
<string>MPEG-Audiodatei</string>
我有一个这样的表达:
//string[preceding-sibling::key[text()[contains(., 'Name')]]]/text()
但是这给了我以下所有的字符串标签,我只想要第一个带有歌曲标题的
问候亚历克斯
# 1 楼答案
您只需添加另一个谓词
[1]
来选择第一个匹配节点。使用text()
的嵌套谓词应该是不必要的:选择此节点的另一种可能更有效的方法是
这将选择所需
key
节点后面的第一个节点(具有任何名称),并测试其名称是否为string
# 2 楼答案
使用:
或者,可以使用仅向前的表达式:
注意事项:
这是一个常见的错误。任何此类表达:
不选择“文档中由
//someExpr
选择的所有节点中的第一个节点”。事实上,它可以选择多个节点上面的表达式选择由
//someExpr
选择的任何节点,并且该节点是其父节点的第一个子节点这就是为什么没有括号,这个问题的另一个答案通常是不正确的