【发布时间】:2015-01-15 21:23:57
【问题描述】:
我想编写一个 xsl 模板来检查给定节点是否是唯一的子节点,而不是某些指定的元素:
在这个例子中,
<root>
<!-- this is ok, the ok nodes are at the top, followed by only 1 target -->
<mynode>
<ok1/>
<ok2/>
<target/>
</mynode>
<!-- will fail, bad element before target -->
<mynode>
<ok1/>
<ok2/>
<bad/>
<target/>
</mynode>
<!-- no match, multiple target nodes -->
<mynode>
<ok1/>
<ok2/>
<target/>
<target/>
</mynode>
</root>
我正在使用这个 xpath:
<xsl:template match="target[not(following-sibling::*)]
[not(preceding-sibling::target)]
[not(preceding-sibling::*[starts-with(name(), 'bad' or 'hello')])]
">
<hit>
<xsl:apply-templates/>
</hit>
</xsl:template>
在最后一个谓词中,我是否必须明确指出我不想要的任何节点?我可以这样吗
not(preceding-sibling::*[not(starts-with(name(), 'ok'))])
谢谢
【问题讨论】:
-
如果目标之后有ok元素,是否仍然匹配?
-
@JLRishe 在 OP 的 XPath 表达式中,
target似乎必须是mynode的最后一个子节点。只是猜测。 -
@MathiasMüller 好吧,这就是示例似乎表明的内容,但这与问题的描述不一致:“我想编写一个 xsl 模板来检查给定节点是否是唯一的子节点,除了某些指定的元素”。我想我需要提供两个答案。