Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
XSL:根据原始文档中的多个变量在根元素中设置XML属性_Xml_Xslt - Fatal编程技术网

XSL:根据原始文档中的多个变量在根元素中设置XML属性

XSL:根据原始文档中的多个变量在根元素中设置XML属性,xml,xslt,Xml,Xslt,我有一个XML,如下所示(简化以便于回答): 我有一个XSL,它将检查att1和att2是否都是“是”,如果都是,则将它们放在转换后的XML中(格式类似) 我想做的是,因为如果att1和att2都是“否”,则不会返回任何内容,除非: <root> </root> 在这种情况下,我希望在根元素上标记一个属性,类似于BlankXML=“Y”,如下所示: <root BlankXML="Y"> </root> 因此,基本上,如果每个元

我有一个XML,如下所示(简化以便于回答):


我有一个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>