我有一些
XML,例如它看起来像这样:
<root> <field1>test</field1> <f2>t2</f2> <f2>t3</f2> </root>
我想用XSLT转换它,但是我想要在输出中抑制第二个f2元素 – 如何处理我的模板内部,以便在处理源中的第二个f2元素时查看输出中是否已存在f2元素?我的XSLT目前看起来像这样:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" indent="no" omit-xml-declaration="yes" standalone="no" /> <xsl:template match="/"> <xsl:for-each select="./root"> <output> <xsl:apply-templates /> </output> </xsl:for-each> </xsl:template> <xsl:template match="*" > <xsl:element name="{name(.)}"> <xsl:value-of select="." /> </xsl:element> </xsl:template> </xsl:stylesheet>
解决方法
这取决于你想要的系统范围.
即,你只关心同一父母的子元素,或同一级别的所有元素(如果你喜欢的话,是“堂兄弟”)或文档中任何位置的元素……
在第一种情况下,您可以检查前一个兄弟轴以查看是否存在具有相同名称的任何其他元素.
<xsl:if test="count(preceding-sibling::node()[name()=name(current())])=0"> ... do stuff in here. </xsl:if>