【发布时间】:2010-04-10 11:15:06
【问题描述】:
给定这个 xml:
<root>
<list>
<!-- foo's comment -->
<item name="foo" />
<item name="bar" />
<!-- another foo's comment -->
<item name="another foo" />
</list>
</root>
我想使用 XPath 来选择所有前面有评论的项目节点,也就是说,我想选择“foo”和“another foo”项目,而不是“bar”项目。
我已经摆弄了前兄弟轴和 comment() 函数,但无济于事。
【问题讨论】:
-
请注意,在 XSLT/XPath 数据模型中,您正在寻找的那些项目元素不是紧跟在评论节点之前,而是在带有空格的文本节点之前。因此,除非您在样式表中使用
<xsl:strip-space elements="*"/>,否则这些空白文本节点可能会妨碍您。 -
好问题 (+1)。请参阅我的答案以获得唯一(目前)完整的解决方案。 Martin Honnen 的 cmets 是正确的,尽管当前选择的答案可能对您有用,但它可能会突然停止这样做(如果 XPath 引擎提供了 XML 文档,其仅空白节点没有被剥离)。