2011-06-17 43 views
1

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

当变换已经执行了输出XML表示XML文件的唯一值,并发生错误:

[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> 
+0

嗯duffymo,我之前做过,但没有一个结果适合我的具体情况。我会假设一个写这里的人首先尝试谷歌。 – jpee 2011-06-23 12:56:09

回答

2

好吧,除非你告诉我们,样式表代码处理g元素,我们只能猜测。我怀疑你的xsl:stylesheet元素上的属性xpath-default-namespace="ans"可能会解决这个问题。如果没有,请发布足够的代码细节,以便我们重现问题。

+0

谢谢Honnen先生,这就是所需要的。 – jpee 2011-06-23 13:04:11