XPath如何检查祖先元素是否具有某个名称

时间:2014-07-24 01:40:30

标签: java xpath attributes xerces ancestor

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

<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文件。

1 个答案:

答案 0 :(得分:0)

我尝试使用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]]

输出如下所示,只有具有name属性的祖先元素'x'时才会给出:

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