改变“<输出>&#39; if条件的元素

时间:2018-01-15 08:51:09

标签: xslt-2.0 xsl-output

我有两个输入文件,如:

A.XML

<a>
   <data>...</data>
</a>

B.XML

<b>
   <data>...</data>
</b>

我的xslt

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 version="2.0">
    <xsl:output method="xml" encoding="UTF-8" indent="yes"/>

    <xsl:template match="node()|@*">
        <xsl:copy>
            <xsl:apply-templates select="node()|@*"/>
        </xsl:copy>
    </xsl:template>

</xsl:stylesheet>

我想检查第一个根元素,如果它是<a>而不是<xsl:output>

<xsl:output method="xml" encoding="UTF-8" indent="yes"/>

否则

<xsl:output method="xml" encoding="us-ascii" indent="no"/>

提前致谢。

1 个答案:

答案 0 :(得分:1)

嗯,XSLT是XML,因此您当然可以使用XSLT创建具有所需输出编码的另一个XSLT,然后您可以在单独的步骤中运行它。

作为替代方案,您可以检查根元素不是a元素,然后将输出委派给xsl:result-document,您可以在其中更改encoding

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    exclude-result-prefixes="xs"
    version="2.0">

    <xsl:template match="@* | node()">
        <xsl:copy>
            <xsl:apply-templates select="@* | node()"/>
        </xsl:copy>
    </xsl:template>

    <xsl:template match="document-node()[*[not(self::a)]]">
        <xsl:result-document encoding="US-ASCII">
            <xsl:apply-templates/>
        </xsl:result-document>
    </xsl:template>

</xsl:stylesheet>

http://xsltfiddle.liberty-development.net/3Nqn5Y8