我有以下代码,我必须选择id =“text”的所有节点,而不是已经拥有id =“text”的父节点:
<fo:block id="text">
test00
<fo:block id="text">
test01
</fo:block>
<fo:block>
test02
</fo:block>
</fo:block>
<fo:block id="text">
test03
</fo:block>
所以在这个例子中,查询必须只返回带有内容test00和test03的两个fo:block。
谢谢。
答案 0 :(得分:2)
我会选择这样的事情:
//fo:block[@id='text' and not(./*[@id='text'])]
我现在要给它一个测试,以确保它是理智的。是啊。它根据需要返回text00和text03。所以请允许我解释这个表达。
//fo:block # Select all fo:block elements in the document
[
@id='text' and # Get only those whose id attribute's value is "text"
not(./*[@id='text']) # and whose children do not have id attributes equal to "text"
]