这是使用和重写
identity rule
:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="owner">
<owner-details>
<xsl:value-of select="."/>
</owner-details>
</xsl:template>
</xsl:stylesheet>
(基于提供的带有附加属性和所有者详细信息的XML文档):
<node attr1="x" attr2="y">
<data> unknown unstructured xml </data>
<owner>
<details>
<name>John Smith </name>
<profession>XSLT programmer</profession>
</details>
</owner>
</node>
:
<node attr1="x" attr2="y">
<data> unknown unstructured xml </data>
<owner-details>John Smith XSLT programmer</owner-details>
</node>
注意事项
:
-
标识模板复制每个节点
以递归方式“按原样”保存在文档中。
-
. 任何模板,其匹配模式比标识模板的匹配模式更具体,都会覆盖它——XSLT处理器总是为节点选择最具体的匹配模板。
-
使用和重写标识规则是最基本的
,最强大,最一般
-
OP在一篇评论中建议,这个解决方案不允许传递参数。这不是真的
. 任何模板(包括标识规则)都可以编写为具有参数——当需要时。在这种特殊情况下
不
必须通过模板传递参数。
-
模板匹配
owner
调用另一个模板
--所有特定于所有者的处理都可以在这里完成。