我想复制一个 xml 的节点并将其粘贴到同一级别。考虑我有一个 xml,如下所示。<MyXml> <system> <Groups> <Group id="01" check="true"> <name>Value</name> <age>test</age> </Group> <Group id="02" check="true"> <name>Value</name> <age>test</age> </Group> <Group id="03" check="true"> <name>Value</name> <age>test</age> </Group> </Groups> </system></MyXml>我想复制组 03 并使用 XSL 转换粘贴到与“04”相同的级别(组内)。预期产出<MyXml> <system> <Groups> <Group id="01" check="true"> <name>Value</name> <age>test</age> </Group> <Group id="02" check="true"> <name>Value</name> <age>test</age> </Group> <Group id="03" check="true"> <name>Value</name> <age>test</age> </Group> <Group id="04" check="true"> <name>Value</name> <age>test</age> </Group> </Groups> </system></MyXml>有人可以帮忙完成相同的 XSL 样式表。不确定下面的 xsl 是否正确。提前致谢。<?xml version="1.0" encoding="UTF-8"?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/><xsl:param name="groupId" /><xsl:param name="newGroupId" /><xsl:template match="node()|@*" name="identity"> <xsl:copy> <xsl:apply-templates select="node()|@*"/> </xsl:copy> </xsl:template><xsl:template match="MyXML/system/Groups/Group[@id=$groupId]" > <xsl:copy> <xsl:apply-templates select="@*|node()"/> <!--Wanted to do something for pasting the copied node and changing the id value with new Group Id.--> </xsl:copy></xsl:template></xsl:stylesheet>
1 回答
慕码人2483693
TA贡献1860条经验 获得超9个赞
在 XSLT 1.0 中,在模板匹配中包含变量表达式实际上被认为是错误的(尽管您可能会发现某些处理器允许这样做)。
但是你可能应该做的,就是在模板匹配中调用身份模板Group,然后有一个xsl:if决定是否复制它。
试试这个模板
<xsl:template match="Group" >
<xsl:call-template name="identity" />;
<xsl:if test="@id = $groupId">
<group id="{$newGroupId}">
<xsl:apply-templates select="@*[name() != 'id']|node()"/>
</group>
</xsl:if>
</xsl:template>
请注意,您不需要Group模板匹配中的完整路径,除非Group您不想匹配其他级别的元素。(此外,MyXML当您的 XML 将其设为MyXml.XSLT时,您当前的匹配指的是 。XSLT 区分大小写,因此不会匹配)。
添加回答
举报
0/150
提交
取消