问题描述
编辑:在我看来,此问题是由无法完全实现XPath标准的工具引起的。我尝试使用
//key@
可以成功(请参阅评论和答案),但不起作用的原因是该工具仅显示第一个结果。
我的XML如下:
<Document id="someIdhere" token="123-456-789" created-by="john_doe" created-at="2020-05-27T10:04:28.244+0000" last-modified-by="jane_doe" last-modified-at="2020-07-30T09:27:59.440+0000">
<somedata/>
<somemoredata/>
<entries>
<entry key="resourceName">resourceLocation</entry>
<entry key="foo">bar</entry>
<entry key="somekey">somevalue</entry>
<entry key="keyname">keyvalue</entry>
<entry key="keyname1">value1</entry>
</entries>
<encryptedEntries/>
</Document>
我正在寻找所有key
属性的值(例如'resourcename','foo'等);而不是<entry>
节点的值。我无法提前知道会有多少条目,也没有内容。
我尝试了以下操作:
//@*
->给出所有属性,而不仅仅是key
//entries/@*
->不返回任何内容//entry@*
->不返回任何内容//@key
->仅返回第一个结果//entries/key[*]
->不返回任何内容//entry@key
->不返回任何内容//entry@key=*
->不返回任何内容
我可能也尝试过其他人,但是我记得这些。如果有什么不同:XPath由Xebialabs的XLRelease中的“ XML Webhook”任务执行。
解决方法
@JaSON已经为您提供了两个可行的XPath in a comment 1 :
-
//@key
将选择文档中的所有key
属性。 -
//entry/@key
将选择文档中key
个元素的所有entry
属性。
您已评论//entry/@key
仅返回第一个值,并将其归入工具/库不符合项。 认识到有些库API的调用与返回第一个选定项和返回所有选定项不同。
以下是您进行的每种尝试的说明:
-
//@*
选择文档中的所有属性。 -
//entries/@*
不选择任何内容,因为entries
没有属性。 -
//entry@*
在语法上是错误的。 -
//@key
选择文档中的所有key
属性,但请参见上面的API注释。 -
//entries/key[*]
选择(key
个元素中的所有entries
个子元素中至少包含一个子元素 -
//entry@key
在语法上是错误的。 -
//entry@key=*
在语法上是错误的。
1 如果他回答一个,将投票给他。