优点, 我需要在以下文档中将'B'标记转换为'X'标记:
<a>
<B marker="true">
<c>
<B marker="true">
<d>
<B marker="true">
</B>
<d>
</B>
</c>
</B>
</a>
注意重复出现的'B',它可以在动态XML中的任何深度出现。 这是我做的:
<xsl:template match="//*[@marker='true']">
<X>
<xsl:copy-of select="./node()"/>
</X>
</xsl:template>
它适用于最顶级的'B'标签,但忽略了所有嵌套标签。
我想我知道问题是什么 - 'copy-of'只是刷新最顶级'B'标签的内容,而不评估它。如何让“复制”重新评估我的模板?
谢谢! 巴鲁。
答案 0 :(得分:7)
我会选择身份转换。
此代码:
<?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"/>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="B[@marker = 'true']">
<X>
<xsl:apply-templates/>
</X>
</xsl:template>
</xsl:stylesheet>
针对此XML输入:
<a>
<B marker="true">
<c test="test">
testText
<B marker="true">
<d>
testText2
<B marker="true">
testText3
</B>
</d>
</B>
testText4
</c>
testText5
</B>
</a>
将提供正确的结果:
<a>
<X>
<c test="test">
testText
<X>
<d>
testText2
<X>
testText3
</X>
</d></X>
testText4
</c>
testText5
</X>
</a>