【问题标题】:XPath for numeric index order of element元素的数字索引顺序的 XPath
【发布时间】:2018-10-10 04:12:57
【问题描述】:

以下 XML 示例:

<media id="m12345">
    <medium view="top" mimeType="image/png">
        <description>Top</description>
        <url>https://www.source.org/123</url>
    </medium>
    <medium view="side" mimeType="image/png">
        <description>Side</description>
        <url>https://www.source.org/234</url>
    </medium>
    <medium view="bottom" mimeType="image/png">
        <description>Bottom</description>
        <url>https://www.source.org/345</url>
    </medium>
</media>

如何为第二个中等元素返回“2”的值?

在解析 XML 文件时,我需要为结合 @id from 和子元素的数字索引的元素分配一个唯一值。

所以第一个元素是“m12345-1”,第二个是-2,依此类推。

不确定是否有可以引用的索引常量,或者计算前面的兄弟是否是最好的方法。

我希望这会返回“2”,但它返回“1”:

count(preceding-sibling:://media/medium[@view='side'])+1

提前致谢!

【问题讨论】:

  • preceding-sibling:://media/medium[@view='side'] 是语法错误;它不应该返回任何东西。无论您使用的是哪个版本的 XPath,axisname:: 都只能跟一个 NodeTest。

标签: xml xpath indexing


【解决方案1】:

你是说这个吗:

count(//media/medium[@view='side']/preceding-sibling::medium) + 1

只需将谓词 [@view="side"] 替换为 [@view="top"] 以获取索引 1 或替换为 [@view="bottom"] 以获取 3

【讨论】:

  • 虽然这正是我需要做的,但我无法让它发挥作用。我正在使用codebeautify.org/Xpath-Tester# 进行测试。至少我现在确实看到了我的语法问题。
  • 我不确定你的 XPath 测试器为什么会有这样的行为,但是我通常使用的所有 3 个 XPath 测试器(firstsecondthird)都返回了正确的结果
  • 很公平,与您的测试人员一起为我工作。谢谢!
猜你喜欢
  • 1970-01-01
  • 2020-10-19
  • 2021-12-14
  • 1970-01-01
  • 1970-01-01
  • 2023-03-06
  • 1970-01-01
  • 2011-04-29
  • 1970-01-01
相关资源
最近更新 更多