我有两个输入文件,如:
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"/>
提前致谢。
答案 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>