2017-08-23 48 views
-1

我有一個XML文件,需要解析才能輸出元素的數據。然而,該文件沒有父節點和解析XML文件的傳統方法是給我這個錯誤:解析無父節點的XML文檔 - JAVA

The markup in the document following the root element must be well-formed.

XML文件:

<row> 
    <dam>bellair dam</dam> 
    <last_year>70.6</last_year> 
    <fsc>4.3</fsc> 
    <latitude>33:42:43</latitude> 
    <river>brak river</river> 
    <last_week>35.9</last_week> 
    <this_week>35.9</this_week> 
    <longitude>20:35:52</longitude> 
</row> 
<row> 
    <dam>berg river dam</dam> 
    <last_year>52.7</last_year> 
    <fsc>127.1</fsc> 
    <latitude>33:54:25</latitude> 
    <river>berg river</river> 
    <last_week>37.3</last_week> 
    <this_week>38.2</this_week> 
    <longitude>19:3:30</longitude> 
</row> 
<row> 
    <dam>brandvlei dam</dam> 
    <last_year>38.0</last_year> 
    <fsc>286.1</fsc> 
    <latitude>33:42:42.88</latitude> 
    <river>lower brandvlei river</river> 
    <last_week>20.7</last_week> 
    <this_week>20.5</this_week> 
    <longitude>19:25:7.85</longitude> 
</row> 

有沒有辦法來解析XML文件中的數據作爲字符串並使用字符串操作來處理它?因爲傳統的解析文件的方式不起作用。另外,我無法將根節點更改(添加)到XML文件。或者如何將數據寫入文本文件?輸出

例子:

Enter name of the data file: 
testdata.xml 
The dams are: 
bellair dam 
berg river dam 
brandvlei dam 
+0

你不應該調用你的文件的XML文件,因爲它顯然不是格式良好。你爲什麼不創建一個帶有根節點和原始文件內容的臨時文件?然後,您可以使用每個標準的XML解析器來解析該文件。 – vanje

+0

我不能改變內容,因爲這是我給的文件。並且我的程序將針對這種類型的文件進行測試。但除了使用DocumentBuilder等不適用於我的情況外,沒有別的辦法可以獲取內容。 – pk123

回答

2

因爲你有一個XML格式不正確,你將有幾種選擇。您可以修改輸入,編寫自己的解析器或將每行部分解析爲xml。

一個建議:

File file = new File("malformedXmlMissingRoot.xml"); 
FileInputStream fis = new FileInputStream(file); 
List<InputStream> streams = Arrays.asList(
    new ByteArrayInputStream("<root>".getBytes()), 
    fis, 
    new ByteArrayInputStream("</root>".getBytes())); 
InputStream cntr = new SequenceInputStream(Collections.enumeration(str)); 

和使用InputStream在典型的XML解析器。