XSL:根据原始文档中的多个变量在根元素中设置XML属性
我有一个XML,如下所示(简化以便于回答):XSL:根据原始文档中的多个变量在根元素中设置XML属性,xml,xslt,Xml,Xslt,我有一个XML,如下所示(简化以便于回答): 我有一个XSL,它将检查att1和att2是否都是“是”,如果都是,则将它们放在转换后的XML中(格式类似) 我想做的是,因为如果att1和att2都是“否”,则不会返回任何内容,除非: <root> </root> 在这种情况下,我希望在根元素上标记一个属性,类似于BlankXML=“Y”,如下所示: <root BlankXML="Y"> </root> 因此,基本上,如果每个元
我有一个XSL,它将检查att1和att2是否都是“是”,如果都是,则将它们放在转换后的XML中(格式类似)
我想做的是,因为如果att1和att2都是“否”,则不会返回任何内容,除非:
<root>
</root>
在这种情况下,我希望在根元素上标记一个属性,类似于BlankXML=“Y”,如下所示:
<root BlankXML="Y">
</root>
因此,基本上,如果每个元素的att1和att2都是“no”,则在根元素上传递这个BlankXML属性
这就是我被困的地方。在完整的编程语言中,我可能会创建一个计数器变量,并在每次到达打印新XML的部分时递增它,最后,如果计数器仍然为0,则添加BlankXML元素。然而,在XSL中,我不确定具体如何做到这一点。据我所知,变量更像常量,不能像这样递增
有人有什么想法吗?我认为你从错误的角度看待它。正确的观点是从上面看。尝试以下方法:
<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>
对
谢谢,效果很好。我对XSL还是一个新手,从一种“完整”的编程语言来看,它并不完全相同。
<root BlankXML="Y">
</root>
<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>