【问题标题】:XPath for all attribute values, not just first?所有属性值的 XPath,而不仅仅是第一个?
【发布时间】:2020-09-29 11:51:56
【问题描述】:

编辑:我的问题是由一个没有完全实现 XPath 标准的工具引起的。我对//key@ 的尝试应该有效(参见 cmets & answer),它不起作用的原因是该工具只显示第一个结果。

我的 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'等);不是&lt;entry&gt; 节点的值。我无法提前知道会有多少条目,也不知道内容是什么。

我尝试了以下方法:

//@* -> 提供所有属性,不仅是key
//entries/@* -> 不返回任何内容
//entry@* -> 不返回任何内容
//@key -> 只返回第一个结果
//entries/key[*] -> 无返回值
//entry@key -> 无返回值
//entry@key=* -> 无返回值

我可能也尝试过其他人,但这些是我能记住的。如果有任何区别:XPath 由 Xebialabs 的 XLRelease 中的“XML Webhook”任务执行。

【问题讨论】:

  • //@key 是获取 all 值的正确方法,因此它不是 XPath 问题,而是您正在使用的工具。也试试//entry/@key
  • 谢谢@JaSON。 //entry/@key 仅返回第一个值,因此显然该工具只是令人讨厌。无论如何,感谢您的帮助,我会看看我能对这个工具做些什么。如果您想让您的评论成为答案,我很乐意接受。
  • 我联系了生产我正在使用的工具的公司。显然,这是设计使然:该工具只能检索一个结果。所以我想我要去寻找另一种方法。无论如何感谢您的帮助。

标签: xml xpath xlrelease


【解决方案1】:

@JaSON 已经为您提供了两个可行的 XPaths in a comment1

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

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

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

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

1 如果他发布一个答案,他会投票赞成。

【讨论】:

  • 我联系了生产我正在使用的工具的公司。显然,这是设计使然:该工具只能检索一个结果。所以我想我要去寻找另一种方法。无论如何感谢您的帮助。
  • 我已经接受了你的回答,但是如果 Jason 决定将他的评论变成答案,我会接受他的,因为他是第一位的。
猜你喜欢
  • 2014-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-04
  • 1970-01-01
  • 2018-01-15
  • 1970-01-01
相关资源
最近更新 更多