如何将XML文件读入数据表类型对象?

时间:2013-03-22 22:09:21

标签: java xml servlets

我试图弄清楚如何将各种XML文件读入HTTP Servlet。 XML文件都代表数据表。做这个的最好方式是什么?我试图避免被锁定在一定数量的列中或知道列的名称。

我不确定存储数据的最佳方式,我不太熟悉java中可用的数据对象。我在考虑一个多维数组或列表列表。

感谢您的任何建议

XML文件看起来像这样,来自w3schools:

<CATALOG>
  <CD>
    <TITLE>Empire Burlesque</TITLE>
    <ARTIST>Bob Dylan</ARTIST>
    <COUNTRY>USA</COUNTRY>
    <COMPANY>Columbia</COMPANY>
    <PRICE>10.90</PRICE>
    <YEAR>1985</YEAR>
  </CD>
  <CD>
    <TITLE>Hide your heart</TITLE>
    <ARTIST>Bonnie Tyler</ARTIST>
    <COUNTRY>UK</COUNTRY>
    <COMPANY>CBS Records</COMPANY>
    <PRICE>9.90</PRICE>
    <YEAR>1988</YEAR>
  </CD>
</CATALOG>

或者这个:

<fruits>
  <fruit>
    <name>orange</name>
  </fruit>
  <fruit>
    <name>grapes</name>
  </fruit>
  <fruit>
    <name>bananas</name>
  </fruit>
</fruits>

我最终使用JDOM并创建了一个字符串列表来存储数据。代码如下,任何建议/反馈都表示赞赏。谢谢!

    ArrayList<ArrayList<String>> dataList = new ArrayList<ArrayList<String>>();

    SAXBuilder builder = new SAXBuilder();
    URL url = new URL("http://localhost/test/test.xml");     
    InputStream stream = url.openStream();

    Document document = null;         

    try {
        document = builder.build(stream);
    } 
    catch (JDOMException e) {
    }

    // Get Root Element and name
    Element root = document.getRootElement();
    String rootName = root.getName();

    // Get Second Level Elements, the rows of the data table
    List<Element> items = root.getChildren(); 

    // Get column names, using the first element
    List<Element> firstItem = items.get(0).getChildren();
    ArrayList<String> colNames =  new ArrayList<String>();
    for (Element col : firstItem){
        colNames.add(col.getName());
    }
    dataList.add(colNames);

    // Get data
    for (Element item : items) {
        ArrayList<String> row = new ArrayList<String>();
        for (Element col : item.getChildren()) {
            row.add(col.getText());
        }
        dataList.add(row);
    }

1 个答案:

答案 0 :(得分:1)

显然有很多方法......

我最喜欢的用于阅读XML的开源Java库是JDOM

我最喜欢的用于存储表格数据的通用结构是字符串列表的列表。这是我通常定义它们的方式。 列表&gt; myData = new ArrayList&gt;();