java中的xmlns和xslt-transformation

时间:2011-06-17 08:55:41

标签: java xslt xslt-2.0 xml-namespaces

我正在通过java中的xslt 2.0 saxon将xmlns =“ans”的xml文件转换为javax.xml.Transformer到xmlns =“bns”的xml文件中。

当转换执行时,输出xml仅显示xml文件A的值并发生错误:

[Fatal Error] :3:4: Content is not allowed in prolog.

当我删除文件A的xmlns =“ans”时,结果xml文件b是正确的,并且在转换时没有错误。对于我的用例,将被转换的xml消息将包含命名空间。任何想法如何解决,而不删除输入文件的命名空间声明?

附录:

我的java代码:

System.setProperty("javax.xml.transform.TransformerFactory",  
"net.sf.saxon.TransformerFactoryImpl");  

TransformerFactory transFactory = TransformerFactory.newInstance();
StreamSource stylesource = new StreamSource("transformation.xsl");
Templates template = transFactory.newTemplates(stylesource);
Transformer transformer = template.newTransformer();
StreamSource source = new StreamSource(new File("filea.xml"));

StreamResult result = new StreamResult(new StringWriter());
transformer.transform(source, result);
//result will be written to fileb.xml

我的filea.xml

<?xml version="1.0" encoding="UTF-8"?>
<message xmlns="ans">...
</message>

我的transformation.xsl

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"
xmlns="bns">
<xsl:output method="xml" indent="yes" />
...
</xsl>

1 个答案:

答案 0 :(得分:2)

除非你向我们展示样式表代码处理元素,否则我们只能猜测。我怀疑将xpath-default-namespace="ans"元素放在xsl:stylesheet元素上可能会解决问题。如果没有,请发布足够的代码详细信息,以便我们重现问题。