本文介绍了使用 xslt 重命名节点和值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我是 xslt 的新手,有一项任务,我不确定该去哪里.我想重命名节点,但保持所有节点声明的格式.在实际上下文中,我将应用它,我将进行一系列像这样的重命名,但为了简洁起见,我编写的示例仅涉及重命名一个节点.我使用的是 XSL 1.0.
I'm new to xslt, and have a task that I'm not really sure where to go with. I want to rename nodes, but maintain the format all node declarations. In the actual context I'll be applying this to, I'll be doing a series of renames like this, but for the sake of brevity, the sample I've written up only involves renaming one node. I am using XSL 1.0.
输入:
<variables>
<var>
<RENAME> a </RENAME>
</var>
<var RENAME='b'/>
<var>
<DO_NOT_TOUCH> c </DO_NOT_TOUCH>
</var>
<var DO_NOT_TOUCH='d'/>
</variables>
期望输出:
<variables>
<var>
<DONE> a </DONE>
</var>
<var DONE='b'/>
<var>
<DO_NOT_TOUCH> c </DO_NOT_TOUCH>
</var>
<var DO_NOT_TOUCH='d'/>
</variables>
我的 xslt:
<xsl:template match="RENAME">
<RENAMED>
<xsl:apply-templates select="@*|node()"/>
</RENAMED>
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
电流输出
<variables>
<var>
<RENAMED> a </RENAMED>
</var>
<var RENAME="b">
</var>
<var>
<DO_NOT_TOUCH> c </DO_NOT_TOUCH>
</var>
<var DO_NOT_TOUCH="d">
</var>
</variables>
推荐答案
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="RENAME">
<DONE>
<xsl:apply-templates select="@* | node()"/>
</DONE>
</xsl:template>
<xsl:template match="@RENAME">
<xsl:attribute name="DONE">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:template>
</xsl:stylesheet>
针对您的样本的输出:
<variables>
<var>
<DONE> a </DONE>
</var>
<var DONE="b"></var>
<var>
<DO_NOT_TOUCH> c </DO_NOT_TOUCH>
</var>
<var DO_NOT_TOUCH="d"></var>
</variables>
这篇关于使用 xslt 重命名节点和值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!