我有一个旧架构(xsd)格式的xml消息。我的新架构完全相同,但我在旧版本中嵌入了一个元素。例如:
我的旧架构有一个元素:
<exclude> MyRestriction </exclude>
但我的新架构是这样的:
<exclude> <restriction> MyRestriction </restriction> </exclude>
并且整个消息与之前相同。上次我曾经做过副本但是现在 我需要一个模板,复制所有内容,但将exclude的值移动到限制标记。有人可以帮我吗?
由于
答案 0 :(得分:2)
您可以使用模板匹配排除模板
中的文字<xsl:template match="exclude/text()">
<restriction><xsl:value-of select="." /></restriction>
</xsl:template>
如果需要,这种方式会将排除中的任何其他子元素保留在其中。
因此,给出以下XSLT
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="exclude/text()">
<restriction><xsl:value-of select="." /></restriction>
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
应用于以下XML
<exclude ex="1"> MyRestriction <test>Hello</test> </exclude>
以下是输出
<exclude ex="1">
<restriction> MyRestriction </restriction>
<test>Hello</test>
</exclude>
答案 1 :(得分:1)
使用此模板:
<xsl:template match="exclude">
<xsl:copy>
<restriction>
<xsl:value-of select="."/>
</restriction>
</xsl:copy>
</xsl:template>