我有一个xml文件,如下所示。
<note>
<from> </from>
<to>
<name> </name>
<number> </number>
</to>
<message>
<head> </head>
<body> </body>
</message>
</note>
我想使用XSTL构建如下的xml结构。
<note>
<from> </from>
<message>
<name> </name>
<number> </number>
<head> </head>
<body> </body>
</message>
</note>
我尝试过这样的事情。
<xsl:template match="//to">
<xsl:copy-of select="//message"/>
</xsl:template>
提前致谢。
答案 0 :(得分:3)
从身份模板开始,身份模板自己将节点复制到输出文档&#34;原样&#34;
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
这意味着您只需要为希望实际更改的节点编写模板。
首先,您不希望 出现在输出中的同一位置,因此请添加模板以忽略它
<xsl:template match="to" />
接下来,您要转换消息元素,以将的子元素追加到元素。您可以使用以下模板执行此操作,该模板类似于标识模板,但需要额外的行来执行额外复制。
<xsl:template match="message">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
<xsl:apply-templates select="../to/*"/>
</xsl:copy>
</xsl:template>
试试这个XSLT
<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:template match="to" />
<xsl:template match="message">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
<xsl:apply-templates select="../to/*"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>