如何使用XSLT根据属性值重命名XML元素?
XSLT实现将PARTY_ID元素重命名为其type属性值
下面是满足需求的XSLT代码,它会把所有<PARTY_ID>元素替换为以其type属性值命名的新元素,同时保留其他所有节点不变:
<?xml version="1.0" encoding="UTF-8"?> <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> <!-- 专门匹配PARTY_ID元素,重命名为type属性的值 --> <xsl:template match="PARTY_ID"> <!-- 用type属性值作为新元素的名称 --> <xsl:element name="{@type}"> <!-- 复制PARTY_ID的所有子节点(这里是文本内容) --> <xsl:apply-templates select="node()"/> </xsl:element> </xsl:template> </xsl:stylesheet>
代码说明:
- 身份模板:这是XSLT中最基础的模板,作用是原样复制输入XML中的所有节点、属性和文本内容,保证除了需要修改的
<PARTY_ID>之外,其他元素都保持不变。 - PARTY_ID匹配模板:专门匹配
<PARTY_ID>元素,使用<xsl:element>动态创建新元素,元素名称通过{@type}获取原元素的type属性值,然后复制原元素的子内容(这里是文本节点)到新元素中。
输入示例:
<PARTY> <PARTY_ID type="buyer_specific">XXXXXX</PARTY_ID> <PARTY_ID type="gln">YYYYYYYYYYYY</PARTY_ID> <PARTY_ROLE>buyer</PARTY_ROLE> </PARTY>
输出结果:
<PARTY> <buyer_specific>XXXXXX</buyer_specific> <gln>YYYYYYYYYYYY</gln> <PARTY_ROLE>buyer</PARTY_ROLE> </PARTY>
内容的提问来源于stack exchange,提问作者Jesper Bloch-Hansen
相关产品推荐
相关产品推荐

