使用java XSLT复制元素会释放带有输出html的命名空间(不适用于第一个元素)
我有以下XML使用java XSLT复制元素会释放带有输出html的命名空间(不适用于第一个元素),java,xslt,namespaces,Java,Xslt,Namespaces,我有以下XML <root> <a>test</a> <b xmlns="bns">test</b> <a>test</a> <b xmlns="bns">test</b> <a>test</a> </root> 这个XSL <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/X
<root>
<a>test</a>
<b xmlns="bns">test</b>
<a>test</a>
<b xmlns="bns">test</b>
<a>test</a>
</root>
这个XSL
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="html" indent="no"/>
<xsl:template match="*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
如果我使用Java将XSL应用于XML,则第二个b标记的命名空间将被删除:
<root>
<a>test</a>
<b xmlns="bns">test</b>
<a>test</a>
<b>test</b>
<a>test</a>
</root>
我注意到这只发生在输出方法html中。有人能告诉我为什么以及我能做些什么吗?我已经在at使用Xalan 2.7.1进行了测试,但无法重现这个问题。因此,请告诉我们有关Java使用哪个XSLT处理器的更多详细信息,如果是内置处理器,请分别告诉我们Java的哪个版本,以便我们可以重现问题。我使用的是OpenJDK运行时环境IcedTea 2.5.3 7u71-2.5.3-0ubuntu0.14.04.1版本1.7.0\u 65。使用的transformer类是com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl。我做了一些进一步的测试,错误只发生在输出模式html中,而不是在xml输出模式中。Java 1.7将允许您使用Saxon 9和XSLT 2.0,这有望比JDK拥有的内部Xalan处于更好的状态。是的,可能是这样,但我希望在没有外部库的情况下使用它。如果我使用命令行java org.apache.xalan.xslt.Process,只有在java应用程序中转换它时才会出现错误。它工作正常。我对xalan的细节不太熟悉,我知道它基本上有两个XSLT1.0实现,一个解释xslt,一个编译xslt,我认为xsltc就是编译器,因此,首先需要确保应用程序代码和命令行使用相同的实现xsltc。如果仍然存在差异,那么这可能是由于JDK中内部化的Xalan和Apache提供的Xalan版本不同造成的。我认为Apache上的XalanJava项目最近得到了一些小的更新,所以也许你可以在那里找到比stackoverflow上更多的专业知识。