选择有约束的兄弟姐妹

时间:2014-04-23 17:22:57

标签: xpath

我有一个

的XML文件
<chapter template="A" id='1'/>
<chapter template="B"/>
<chapter template="B"/>
<chapter template="A" id='2'/>
<chapter template="B"/>
<chapter template="B"/>
<chapter template="B"/>
<chapter template="B"/>
<chapter template="C"/>

我有一个XSLFO来处理这些章节。模板“A”的最后一章需要一些特殊的处理。 id属性不是我可以过滤的东西(只是为了说明而添加它)。 我有一个template match="chapter"来处理所有章节的一般处理。在该代码块中的某个部分是仅适用于使用模板A的最后一章的部分。仅为该章执行此代码块,我已经进行了此测试:

if test="following-sibling::chapter[not(@template = 'B')]/@template = 'C'"

所以我试图找到第一个不是模板B的兄弟,并检查这个兄弟是否有模板C.(它已被设置为模板C始终是最后一章)。 当处理章节id = 1和id = 2时,上面的XPath返回'true',因此它太宽泛了。当章节与模板C有任何后续兄弟时,这是真的。 所以我在想:我会限制测试只看下面的第一个不是模板B的兄弟:

if test="following-sibling::chapter[not(@template = 'B')][1]/@template = 'C'"

但是这对所有章节都返回false。我哪里错了?

1 个答案:

答案 0 :(得分:1)

//chapter[@template='A'][last()]之类的内容怎么办?