2012-07-09 71 views
1

我無法使用SAXBuilder將XML文件解析爲JDOM文檔實例。JDOM - SaxBuilder - 內容不允許在序言中

它拋出以下異常:

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

我已經找到並閱讀棧交流和在互聯網其他地方所有這些線程,並嘗試了各種東西來調試錯誤。

我最終得到了下面的代碼片段,它也會拋出。

String template = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<server></server>"; 
InputStream in = new StringBufferInputStream(template); 
return saxBuilder.build(in); 

它有什麼問題?


我羞於承認,但事實證明,這不是由我在這裏,而是表示在以後的片斷,我是反對另外一個使用比較分析的XML產生的誤差XMLUnit庫。

讓我相信這個錯誤出現在提示行中的想法是錯誤信息的內容。

我相信這是適當的關閉(如果可能,刪除,如果可能)這個問題,因爲它並不意味着任何價值。

+0

你真的有字符串或者你從文件中讀取一個文本/ xml文件?根據我的經驗,如果文件由於某種原因返回null並且實際上並未構建數據,則可能會發生此錯誤。 – Scorpio 2012-07-09 12:29:52

回答

1

這個錯誤通常意味着你在你的xml聲明之前有文本。

在你的代碼片段中,xml看起來很好。雖然這個問題可能不在您的文檔中。如果您有一個模式或其他引用的xml文件,則實際上該錯誤可能指向其中的一個。

0

我懷疑問題在別的地方。下面的代碼(使用dom4j)爲我工作:

public static void main(String[] args) throws DocumentException { 
    String template = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<server></server>"; 
    SAXReader saxReader = new SAXReader(); 
    InputStream is = new StringBufferInputStream(template); 
    Document document = saxReader.read(is); 
    System.out.println(document.asXML()); 
} 

還要注意StringBufferInputStream已被棄用。另一種方法是

 StringReader sr = new StringReader(template); 
     Document document = saxReader.read(sr); 

所以,這個問題是不是在你的XML片段,但可能在saxBuilder.build(...)

+0

不要將字符串轉換爲字節以便將其解析爲XML,請使用StringReader。 – jtahlborn 2012-07-09 12:31:12

+0

@jtahlborn你是對的:編輯答案 – MarcoS 2012-07-09 12:51:40

相關問題