我正在寻找一个简单地返回XML的XSL片段。这听起来微不足道,但我似乎无法在网络上的任何地方找到一个例子。有帮助吗?
答案 0 :(得分:32)
为了复制完整的XML文档,必须有一个与根匹配的模板。这可能是:
<强> <xsl:template match="/">
强>
或
<强> <xsl:template match="node()">
强>
然后单个复制当前节点(根节点)就足够了:
<xsl:copy-of
select =“。”/&gt;
因此,一个完整的转变是:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:copy-of select="."/>
</xsl:template>
</xsl:stylesheet>
虽然这可能是最简单的转换,但 XSLT程序员使用另一个,广为人知的identity transformation
或identity rule
:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
共识转换被认为是最基本的XSLT设计模式之一并且如此大量使用,是通过用其他更具体的模板覆盖此模板规则,可以非常轻松地执行各种操作否则将很难。示例是删除具有特定名称或满足某些其他条件的特定(一组)元素,重命名特定元素,更改特定元素的名称空间,创建特定元素的新子项或兄弟,...等。
有关使用身份转换的更多信息和代码段,请查看here。
答案 1 :(得分:10)
这是一个常见问题,答案称为identity transform。以下模板将正确复制现有XML。然后添加额外的模板来修改行为(例如删除某些元素,重命名元素或属性等)。
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
答案 2 :(得分:0)
怎么样:
<xsl:template match ="/">
<xsl:copy-of select="."/>
</xsl:template>
也许有更简单的方法?