0

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

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

4

1 回答 1

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]]

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

Element='<b number="1" />'
于 2014-07-24T07:47:41.613 回答