Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用java XSLT复制元素会释放带有输出html的命名空间(不适用于第一个元素)_Java_Xslt_Namespaces - Fatal编程技术网

使用java XSLT复制元素会释放带有输出html的命名空间(不适用于第一个元素)

使用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

我有以下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/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上更多的专业知识。