【问题标题】:XPath how to check if an ancestor element has a certain nameXPath如何检查祖先元素是否具有特定名称
【发布时间】:2014-09-15 10:08:57
【问题描述】:

我有一个像这样的元素结构:

<template>
    <x name="foo">
        <y>
            <x>
                <a>
                    <b number="1" />
                    <c>2</c>
                </a>
            </x>
            <c>5</c>
        </y>
    </x>
</template>

我需要它以便b 元素只能存在于a 中,只要其中一个祖先是带有名称的x。我写了一组替代方案,但我无法让测试正常工作。这就是我认为可行的方法:

ancestor::x[@name]

但我没有得到任何结果。我唯一幸运的 xpath 是这样的:

ancestor::node()

谁能告诉我我错过了什么?

编辑:

我正在使用 java xerces 2.11 库来加载包含标签的 xsd 文件。

【问题讨论】:

  • 嗯...这个 XPath 能够返回给定 XML 发布的结果://b[ancestor::x[@name]]
  • ancestor::x[@name] 应该在正确的上下文中工作。您可能需要显示更多上下文,以便我们解决问题。

标签: java xpath attributes xerces ancestor


【解决方案1】:

我尝试使用下面的 xpath,它给了我正确的结果。我希望您为祖先元素使用正确的上下文。

//template//b/ancestor::x[@name]

输出结果如下:

Element='<x name="foo">
  <y>
    <x>
      <a>
        <b number="1" />
        <c>2</c>
      </a>
    </x>
    <c>5</c>
  </y>
</x>'

根据您的情况,xpath 将是:

//template//b[ancestor::x[@name]]

并且输出将如下所示,仅当它具有具有名称属性的祖先元素“x”时才会给出:

Element='<b number="1" />'

【讨论】:

    猜你喜欢
    • 2013-06-30
    • 2012-03-13
    • 1970-01-01
    • 2014-04-02
    • 1970-01-01
    • 2019-06-10
    • 1970-01-01
    • 2013-09-20
    相关资源
    最近更新 更多