如何使用XSLT1.0为XML的每个Member节点添加JoinMember父节点?
XSLT 1.0 实现单个Member节点包裹为JoinMember
没问题,这是个很常见的XML结构转换需求,咱们直接用XSLT 1.0就能轻松实现。
首先先确认你的输入XML:
<Members> <Member name="1" /> <Member name="2" /> <Member name="3" /> <Member name="4" /> <Member name="5" /> </Members>
你的需求是给每一个<Member>节点外层套上<JoinMember>容器,同时保留根节点<Members>不变。对应的XSLT 1.0样式表如下:
<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> <!-- 专门匹配Member节点的模板,包裹为JoinMember --> <xsl:template match="Member"> <JoinMember> <xsl:copy-of select="."/> </JoinMember> </xsl:template> </xsl:stylesheet>
代码解释:
- 第一个模板是身份转换模板,它会默认复制所有的节点、属性和文本内容,保证除了我们专门处理的
<Member>节点外,其他结构都原样保留。 - 第二个模板专门匹配
<Member>节点,我们在这里创建一个新的<JoinMember>节点,然后用<xsl:copy-of select="."/>把原有的<Member>节点完整复制进去。
运行这个样式表后,你就能得到期望的输出XML:
<Members> <JoinMember> <Member name="1" /> </JoinMember> <JoinMember> <Member name="2" /> </JoinMember> <JoinMember> <Member name="3" /> </JoinMember> <JoinMember> <Member name="4" /> </JoinMember> <JoinMember> <Member name="5" /> </JoinMember> </Members>
内容的提问来源于stack exchange,提问作者Renuka
相关产品推荐
相关产品推荐

