如何将XML文件读入数据表类型对象?
问题描述:
我想弄清楚如何将各种XML文件读入HTTP Servlet。 XML文件都代表一个数据表。做这个的最好方式是什么?我试图避免被锁定到某些列或知道列的名称。如何将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);
}
答
显然有许多方法...
我最喜欢的开源Java库,用于读取XML是JDOM。
我最喜爱的存储表格数据的通用结构是字符串列表。这是我通常如何定义它们。 List> myData = new ArrayList>();
+0
谢谢!我为我提议的解决方案添加了代码,任何建议/反馈意见。 – 2013-03-26 13:29:29
使用XML模式和JAXB。 – 2013-03-22 22:15:12
使用XML模式?但我不想为每个模式(列数)编写单独的方法。 – 2013-03-22 22:38:54
模式通过指定XML文档的结构来工作;您应该能够指定具有可变列数的结构。 – 2013-03-22 22:47:21