1

编辑:我的问题是由一个没有完全实现 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”任务执行。

4

1 回答 1

3

@JaSON 已经在评论1中为您提供了两个可行的 XPath :

  • //@key将选择key文档中的所有属性。
  • //entry/@key将选择文档中元素的所有key属性。entry

您评论说//entry/@key只返回第一个值并将其归结为工具/库不合规。 意识到有一些库 API 对返回第一个选定项目和返回所有选定项目有不同的调用。

以下是您所做的每项尝试的解释:

  • //@*选择文档中的所有属性。
  • //entries/@*什么都不选择,因为entries没有属性。
  • //entry@*语法不正确。
  • //@key选择key文档中的所有属性,但请参阅上面的 API 说明。
  • //entries/key[*]选择具有至少一个子元素的所有key子元素(元素的)entries
  • //entry@key语法不正确。
  • //entry@key=*语法不正确。

1如果他发布一个答案,他会支持他的答案。

于 2020-09-29T12:52:48.397 回答