所以,考虑这个XML:
<root>
<table>
<tr>
<td>asdf</td>
<td>qwerty</td>
<td>1234 <p>lorem ipsum</p> 5678</td>
</tr>
</table>
<root>
......我怎么能把它变成这样的?
<root>
<table>
<tr>
<td><BLAH>asdf</BLAH></td>
<td><BLAH>qwerty</BLAH></td>
<td><BLAH>1234 <p>lorem ipsum</p> 5678</BLAH></td>
</tr>
</table>
</root>
然后,<td>
的每个实例都将包含<BLAH>
元素,并且每个<td>
的内容将在新节点内。
<td>
元素,但是在外部而不是里面:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes" method="xml"/>
<xsl:strip-space elements="*"/>
<!-- identity rule -->
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="table//td">
<BLAH>
<xsl:copy>
<xsl:apply-templates select="@*"/>
<xsl:apply-templates select="node()"/>
</xsl:copy>
</BLAH>
</xsl:template>
</xsl:stylesheet>
...这产生了 不受欢迎的 结果:
<root>
<table>
<tr>
<BLAH><td>asdf</td></BLAH>
<BLAH><td>qwerty</td></BLAH>
<BLAH><td>1234 <p>lorem ipsum</p> 5678</td></BLAH>
</tr>
</table>
</root>
测试
答案 0 :(得分:2)
只需移动<BLAH>
内的xsl:copy
:
<xsl:template match="td">
<xsl:copy>
<xsl:apply-templates select="@*"/>
<BLAH>
<xsl:apply-templates select="node()"/>
</BLAH>
</xsl:copy>
</xsl:template>
答案 1 :(得分:1)
试试这个......
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes" method="xml" />
<xsl:strip-space elements="*" />
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
<xsl:template match="td">
<xsl:copy>
<BLAH>
<xsl:apply-templates select="@*|node()" />
</BLAH>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>