我似乎犯了一些简单/愚蠢的错误。
给定以下(简化的)xml:
<xml>
<a id="0" />
<a id="0" />
<a id="0" />
<a id="2" />
<a id="2" />
</xml>
并给出以下(简化的)xslt:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="xml">
<xsl:for-each select="//a[not(./@id = preceding::a/@id)]">
id=<xsl:value-of select="@id" />
</xsl:for-each>
</xsl:template>
这给了我以下输出:
<?xml version="1.0" encoding="UTF-8"?>
id=0
id=0
id=2
可以看到,with元素id=0
被处理了两次,尽管应该只处理一次。在XML输入中,它出现3次,并且该问题仅出现在第一个元素上(因为with元素id=2
仅被正确处理了一次)。
请注意,由于原始XML更复杂,因此我需要使用前置过滤器(而不是前置兄弟)。我还需要使用XSLT 1.0,因为我使用Xalan 2.7.1作为Xslt处理器。
多亏了有用的评论,我得以验证这是XSLT处理器的问题。在使用jdk1.7.0_67
系统属性javax.xml.transform.TransformerFactory=null
(因此使用平台默认值)的Mac上(请参阅API doc),这将导致上述错误输出。
换句话说,真正的问题是我未能按照问题中的说明将Xalan设置为Xslt处理器。谢谢您的帮助!
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句