2011-06-17 38 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