我正在使用以下xsl转换:
<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:template match="//something">
<mytag>
<xsl:copy-of select="node()"/>
</mytag>
</xsl:template>
</xsl:stylesheet>
它产生了希望的内容:
<mytag>
<something ...
</mytag>
<mytag>
<something ...
</mytag>
...
但另外,在希望的结果周围有xml文件的所有内容。例如。对于源文件:
<something>Hello</something>
<anotherthing>Bye</anotherthing>
我得到了结果(或类似的东西):
<mytag>
<something>Hello</something>
</mytag>
Hello
Bye
我使用java.xml.transform.Transformer和Oxygen测试了转换。
感谢您的帮助!
答案 0 :(得分:4)
问题在于,有一组“默认”模板规则适用于您没有明确模板的任何节点。如果您只对something
元素感兴趣,那么最简单的方法是添加一个根模板,确保您仅将模板应用于这些模板,而不是其他节点不关心:
<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:template match="/">
<root>
<xsl:apply-templates select="//something" />
</root>
</xsl:template>
<xsl:template match="something">
<mytag>
<xsl:copy-of select="node()"/>
</mytag>
</xsl:template>
</xsl:stylesheet>
(注意我还在结果周围添加了一个根级元素,否则当输入中有多个something
时,结果就不会很好。