0

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

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

谢谢你的任何建议

来自 w3schools 的 XML 文件可能如下所示:

<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);
    }
4

1 回答 1

1

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

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

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

于 2013-03-22T22:17:49.427 回答