不仅是第一个属性,还包含所有属性值的XPath吗?

问题描述

编辑:在我看来,此问题是由无法完全实现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 如果他回答一个,将投票给他。