【问题标题】:Xpath query that check whether 2 element text values exist in a list检查列表中是否存在 2 个元素文本值的 Xpath 查询
【发布时间】:2018-08-14 15:37:29
【问题描述】:

我正在尝试找出一种方法来使用 Xpath 查询检查列表中是否存在 2 个元素文本值。我目前仅限于 Xpath 1.0。

我有一个包含列表的子树 的XML 正文。它看起来像这样:

<tags>
      <tag>A</tag>
      <tag>B</tag>
      <tag>C</tag>
      <tag>E</tag>
</tags>

如果该列表中有标记文本值等于“A”和“C”,我希望有一个返回节点集的查询。 (这会运行一个包含我上面描述的许多 xml 标记列表的文件。

这是我目前的最大努力:

descendant-or-self::node()[local-name(.) = 'tag' and text() = 'A' and (preceding-sibling::text() = 'C' or following-sibling::text() = 'C')]

这个问题可能是由于我的嵌套条件和使用前兄弟和后兄弟。

可以嵌套条件吗?

提前感谢您提供的任何帮助和见解!

【问题讨论】:

    标签: xpath


    【解决方案1】:

    如果 ( //tag/text() = 'A' 和 //tag/text() = 'C' ) 然后 //tag[text() = 'A' 或 text() = 'C']否则//空

    【讨论】:

    • 我无法使用 xmllint --xpath "if ( //tag/text() = 'A' and //tag/text() = 'C' ) then / /tag[text() = 'A' or text() = 'C'] else //empty" file.xml 由于 Xpath 评估失败:表达式无效。
    • 您需要 XPath 2.0 才能使用 if。你可以在这里在线测试:freeformatter.com/xpath-tester.html#ad-output
    • 感谢您的回答。我没有提到我仅限于 Xpath1.0(编辑我的帖子以反映这一点)。我用我正在使用的 XML 文件对此进行了测试,但无法成功匹配我的测试用例。
    • 如果是 XPath 1.0,这会有所帮助:dreamix.eu/blog/java/xml-java/…
    【解决方案2】:

    这是我得出的解决方案:

    //descendant-or-self::node()[local-name(.) = 'tag' and text() = 'A' and (preceding-sibling::node()[text() = 'C'] or following-sibling::node()[text() = 'C']) ]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-06
      • 1970-01-01
      相关资源
      最近更新 更多