我有一个XML如下(为便于回答而简化):
<root>
<element att1="yes" att2="no" other attributes... />
<element att1="yes" att2="no" other attributes... />
<element att1="no" att2="yes" other attributes... />
<element att1="yes" att2="no" other attributes... />
<element att1="yes" att2="yes" other attributes... />
</root>
我有一个XSL,它将检查att1和att2是否都是“是”,如果是,则将它们放入转换后的XML(格式类似)中。
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
<root>
<xsl:for-each select="/root/element">
<xsl:variable name="att1" select="@att1"/>
<xsl:variable name="att2" select="@att2"/>
<xsl:if test="$att1 == 'yes'">
<xsl:if test="$att2 == 'yes'">
<!-- print new element with attributes -->
</xsl:if>
</xsl:if>
</xsl:for-each>
</root>
</xsl:template>
</xsl:stylesheet>
我想要做的是,因为如果att1和att2都是“否”,除了以下任何内容都不会被返回:
<root>
</root>
在这种情况下,我想在根元素上标记一个属性,如BlankXML =“Y”,如下所示:
<root BlankXML="Y">
</root>
基本上,如果每个元素的att1和att2都是“no”,则在根元素上传递此BlankXML属性。
这是我被困的地方。在完整的编程语言中,我可能会创建一个计数器变量,并在每次到达打印新XML的部分时递增它,最后,如果计数器仍为0,则添加BlankXML元素。但是在XSL中,我不确定如何做到这一点。根据我的理解,变量更像是常量,不能像这样增加。
有没有人有任何想法?
答案 0 :(得分:2)
我认为你是从错误的角度看待它。正确的观点来自上方。尝试类似:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes"/>
<xsl:template match="/">
<xsl:variable name="output" select="root/element[@att1='yes' and @att2='yes']" />
<root>
<xsl:if test="not(count($output))">
<xsl:attribute name="blank">yes</xsl:attribute>
</xsl:if>
<xsl:copy-of select="$output"/>
</root>
</xsl:template>
</xsl:stylesheet>