2016-07-25 31 views
0

允許這是一個XML文檔(之前的XML聲明和XSLT處理指令的句子和空白在輸入的一部分):錯誤解析XML:內容未在序言

This XML file does not appear to have any style information associated with it. The document tree is shown below. 


    <?xml version="1.0" encoding="UTF-8"?> 
    <?xml-stylesheet type="text/xsl" href="/3.0/style/exchange.xsl"?> 
     <mts:meta name="elapsed-time" value="18" /> 
     <exchange-documents> 
     <exchange-document country="US" number="8049504"> 
     .... 
     .... 
     .... 

     </exchange-document> 
     </exchange-documents> 

我解析的XML和使用XPath。在大多數的XML文件中,第一行包含一些文本或空格(參見上面的XML)

如果沒有領先的文本,它成功地解析,但如果出現任何文本它產生下面的錯誤:

--- exec-maven-plugin:1.2.1:exec (default-cli) @ XMLHandling --- 

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

我該如何解決這個問題?

,我使用的代碼:

public static void main(String[] args) throws ParseException { 

     String filePath = "D:/newxml.xml"; 

     try { 
      FileInputStream file = new FileInputStream(new File(filePath)); 
      DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance(); 
      DocumentBuilder builder = builderFactory.newDocumentBuilder(); 
      Document xmlDocument = builder.parse(file); 
      XPath xPath = XPathFactory.newInstance().newXPath(); 

      String pubOrPatentNumber = xPath.compile("//preference").evaluate(xmlDocument); 
      ... 
      ... 
      } 
      } 

我可以手動刪除文本和執行,但我需要我的代碼內解決這個自動清理的輸入。

+1

極有可能是字節順序標記。在這裏看到可能的解決方案:http://stackoverflow.com/questions/21891578/removing-bom-characters-using-java –

+1

在代碼級別上,您可以使用字符串庫函數,即查找第一次出現「 ?」在包含文檔的輸入字符串中,然後從這裏開始,然後解析它。不過,由於格式錯誤,我建議謹慎行事。確保XML文檔始終保持良好狀態是避免此類問題的最佳實踐。我希望這有幫助! –

回答

0

從良構的角度來看,文檔中有兩個問題。

  1. 不允許有兩個頂級元素(mts:meta,exchange-documents)。

  2. 前綴mts未被聲明。

此修改文檔格式良好的(但一個需要適應的命名空間URI MTS,並挑選纏繞元件適當的名稱):

<?xml version="1.0" encoding="UTF-8"?> 
<?xml-stylesheet type="text/xsl" href="/3.0/style/exchange.xsl"?> 
<root> 
    <mts:meta xmlns:mts="http://www.example.com" name="elapsed-time" value="18" /> 
    <exchange-documents> 
     <exchange-document country="US" number="8049504"> 
      .... 
      .... 
      .... 
     </exchange-document> 
    </exchange-documents> 
</root> 
+0

Xml文件來自http即我即時解析xml命中Url,創建一個連接等等,每一個Xml的第一行應該是「這個XML文件似乎沒有任何關聯的樣式信息與它一起。文檔樹如下所示。「因爲第一行我無法解析文檔,也無法更新xml – Prabu

+0

更新我的問題中的xml文件 – Prabu

+1

感謝您的回覆,Prabu對此表示歉意。我認爲這是一個複製和粘貼的人造物。那麼這是另一個問題。另外,如果這是通過HTTP檢索的文檔,那麼這意味着服務於此XML的服務器上出現了錯誤,除非可能假設它是XML片段而不是文檔。這個句子是否被瀏覽器顯示,因爲瀏覽器在顯示XML時通常會添加鈴聲和哨聲?如果是這樣,你是否可以嘗試查看和分享實際的源代碼?瀏覽器通常會讓您查看原始XML。 –