我有一个像这样的元素结构:
<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文件。
答案 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" />'