我有以下XML输入文件:
<home>
<folders>
<folder uuid="uuid1">
<name>folder1</name>
<member ref="refA" />
<member ref="refB" />
</folder>
<folder uuid="uuid2">
<name>folder2</name>
<member ref="refC" />
<member ref="refD" />
</folder>
<folder uuid="uuid3">
<name>folder3</name>
<member ref="refE" />
<member ref="refF" />
</folder>
</folders>
</home>
我会得到以下树:
<home>
<folders>
<folder uuid="uuid1">
<name>folder1</name>
<refNews>
<refNew ref="refA" />
<refNew ref="refB" />
</refNews>
</folder>
<folder uuid="uuid2">
<name>folder2</name>
<refNews>
<refNew ref="refC" />
<refNew ref="refD" />
</refNews>
</folder>
<folder uuid="uuid3">
<name>folder3</name>
<refNews>
<refNew ref="refE" />
<refNew ref="refF" />
</refNews>
</folder>
</folders>
</home>
要恢复:
我尝试了几个XSLT模板,但我无法在同一个XSLT文件中重命名和移动: - (
我需要你的帮助。
此致 Zido
答案 0 :(得分:1)
总是更好地了解到目前为止你所拥有的东西,并帮助解决它出错的地方,但实际上这很容易。试试这个:
<xsl:template match="folder">
<xsl:copy>
<xsl:apply-templates select="@* | node()[not(self::member)]"/>
<refNews>
<xsl:apply-templates select="member"/>
</refNews>
</xsl:copy>
</xsl:template>
<xsl:template match="member">
<refNew>
<xsl:apply-templates select="@* | node()"/>
</refNew>
</xsl:template>
如果您不想要refNews
元素,如果没有任何member
,您可以将refNews
元素包装在<xsl:if test="member"/>
中,或者更好,让第一个模板与folder[member]
匹配。
这假设您还定义了身份模板。