解析没有父节点的XML文档 - JAVA

时间:2017-08-23 20:14:32

标签: java xml file xml-parsing

我有一个需要解析的XML文件来输出元素的数据。但是,该文件没有父节点,并且传统的解析XML文件的方法给了我这个错误:

  

根元素后面的文档中的标记必须是   良好的。

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

1 个答案:

答案 0 :(得分: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));

并在典型的XML解析器中使用InputStream