xml - 如何在子节点中选择包含某个子字符串的节点?

标签 xml xpath

我有一个类似结构的XML,其中包含许多项目:

<Items>
  <Item>
    <Name>Item name 1</Name>
    <Details>
      <Detail>ABC DEF</Detail>
      <Detail>GHI JKL</Detail>
    </Details>
  </Item>
  <Item>
    <Name>Item name 2</Name>
    <Details>
      <Detail>ABC DEF</Detail>
      <Detail>GHI MNO</Detail>
    </Details>
  </Item>
</Items>


如何获得至少在其详细信息子节点之一中包含子字符串“ MNO”的所有Item节点的列表?

此表达式不返回带有描述“项目名称2”的预期项目:

/Items/Item[contains(Details/Detail, 'MNO')]


请指教。提前谢谢了! Vojtech

最佳答案

这是工作变体:

/Items/Item[Details/Detail[contains(.,"MNO")]]

基本上,您的示例中发生的情况是:仅在第一个Detail节点中搜索“ MNO”字符串以查找是否包含。因此,如果您将XML更改为:

<Items>
  <Item>
    <Name>Item name 1</Name>
    <Details>
      <Detail>ABC DEF</Detail>
      <Detail>GHI JKL</Detail>
    </Details>
  </Item>
  <Item>
    <Name>Item name 2</Name>
    <Details>
      <!-- Nodes order was changed -->
      <Detail>GHI MNO</Detail>
      <Detail>ABC DEF</Detail>
    </Details>
  </Item>
</Items>


您的XPath可以正常工作。

关于xml - 如何在子节点中选择包含某个子字符串的节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8444948/

相关文章:

java - 如果用户不提供完整信息,如何保持警报对话框打开

java - XPATH 不起作用

java - 将 namespace 添加到 AXIOMXPath

selenium - 使用 Internet Explorer 8 中的开发人员工具验证 XPath 是否有效

mysql - 使用动态 XPATH 在 MySql 中提取 XML

java - 无法使用 Intellij Idea 执行 Xpath

mysql - 将多个 xml 传递给存储过程并检索 xml 属性

xml - 获取当前节点的所有祖先

html - xPath/HTML : Select node based on related node

Android 工具栏 minHeight 多余?