我正在尝试复制带有属性和节点的xml文档。输出不包含属性。 fi.xml是输入,test.xsl执行转换(xsl中需要一个模式)。感谢。
f1.xml
<test attr="val">
<subtest attr2="val2"/>
</test>
test.xsl
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:copy>
<xsl:apply-templates select="document('f1.xml')" mode="abc"/>
</xsl:copy>
</xsl:template>
<xsl:template match="/ | @* | node()" mode="abc">
<xsl:copy>
<xsl:apply-templates mode="abc"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
output:
<?xml version="1.0" encoding="UTF-8"?><test>
<subtest/>
</test>
答案 0 :(得分:4)
最短的解决方案:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="/">
<xsl:copy-of select="document('f1.xml')"/>
</xsl:template>
</xsl:stylesheet>
更灵活的解决方案,但更简单(无模式)和更标准:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="/">
<xsl:apply-templates select=
"document('f1.xml')/node()"/>
</xsl:template>
</xsl:stylesheet>
解释:identity rule对document('f1.xml')
答案 1 :(得分:2)
该样式表似乎很奇怪,但请尝试将xsl:apply-templates
更改为:
<xsl:apply-templates mode="abc" select="@*|node()"/>