我需要读取xml以下的读取值并使用saxparser为此,但是在读取标签时卡住了多次,我无法读取下一行标签,任何人都可以帮助我......?
整个数据出现在标签之间,并且引用不同的表格,而tage给出了需要插入的记录集合,并且引用列名称和值需要插入到该特定列中。
<?xml version="1.0" encoding="UTF-8"?>
<DATA>
<TABLEDATA name="web_order_header" rows="1">
<ROW>
<FIELD name="order_id"> 40403141201067683</FIELD>
<FIELD name="order_date"> Mar 14 , 2012</FIELD>
<FIELD name="company_name">Testing</FIELD>
<FIELD name="company_website"> N/A </FIELD>
<FIELD name="customer_firstname">uni</FIELD>
<FIELD name="customer_lastname">u</FIELD>
<FIELD name="email">aaa@xyz.com</FIELD>
<FIELD name="billto_contact">uni</FIELD>
<FIELD name="billto_phone">78784</FIELD>
<FIELD name="billto_phone_ext">N/A</FIELD>
<FIELD name="billto_address">ss</FIELD>
<FIELD name="billto_city">mys</FIELD>
<FIELD name="billto_state">Kar</FIELD>
<FIELD name="billto_zip">5678945</FIELD>
<FIELD name="shipto_contact">uni</FIELD>
<FIELD name="shipto_phone">78784</FIELD>
<FIELD name="shipto_phone_ext">N/A</FIELD>
<FIELD name="shipto_address">ss</FIELD>
<FIELD name="shipto_city">mys</FIELD>
<FIELD name="shipto_state">Kar</FIELD>
<FIELD name="shipto_zip">5678945</FIELD>
</ROW>
</TABLEDATA>
<TABLEDATA name="web_order_detail" rows="3">
<ROW>
<FIELD name="order_id"> 40403141201067683</FIELD>
<FIELD name="qty">1</FIELD>
<FIELD name="item_id">JUS72-28250</FIELD>
<FIELD name="mfr">Justrite Manufacturing Co</FIELD>
<FIELD name="item_desc">EcoPolyBlend&trade; Drum Collection Station For Spills</FIELD>
<FIELD name="uom">Each</FIELD>
<FIELD name="price">739.00</FIELD>
</ROW>
<ROW>
<FIELD name="order_id"> 40403141201067683</FIELD>
<FIELD name="qty">1</FIELD>
<FIELD name="item_id">COM62-CAS-B51V80-CA1B</FIELD>
<FIELD name="mfr">Compressed Air Systems</FIELD>
<FIELD name="item_desc">5HP 80 GAL 15CFM Reciprocating Air Compressor</FIELD>
<FIELD name="uom">Each</FIELD>
<FIELD name="price">1265.33</FIELD>
</ROW>
<ROW>
<FIELD name="order_id"> 40403141201067683</FIELD>
<FIELD name="qty">2</FIELD>
<FIELD name="item_id">KIM11-05701</FIELD>
<FIELD name="mfr">Kimberly Clark Corp</FIELD>
<FIELD name="item_desc">Wypall&reg; 12.5&quot; x 13&quot; L40 Q-Fold White Towel</FIELD>
<FIELD name="uom">Case</FIELD>
<FIELD name="price">88.00</FIELD>
</ROW>
</TABLEDATA>
</DATA>
这是我的JAVA代码
public void readXml(Document requestDoc,PrintStream out)throws IOException, JDOMException, SQLException, ParseException {
Document responseDoc = null;
Element root = requestDoc.getRootElement();
List tableNameList = root.getChildren("TABLEDATA");
for(int i=0; i<tableNameList.size(); i++){
Element table = (Element) tableNameList.get(i);
String tableName = table.getAttribute("name").getValue();
int numOfRows = table.getAttribute("rows").getIntValue();
System.out.println(tableName+" : tableName---------------------- numOfRows : "+numOfRows);
List rowList = root.getChild("TABLEDATA").getChildren("ROW");
for(int j=0; j<rowList.size(); j++){
Element row = (Element) rowList.get(j);
System.out.println("row : "+rowList.size());
List fieldList = root.getChild("TABLEDATA").getChild("ROW").getChildren("FIELD");
System.out.println("----------------------");
for(int k=0; k<fieldList.size(); k++){
Element field = (Element) fieldList.get(k);
String fieldName = field.getAttribute("name").getValue();
String fieldValue = field.getTextTrim();
System.out.println(fieldName+"----------------------"+fieldValue);
}
System.out.println("----------------------");
}
}
答案 0 :(得分:2)
你总是看着第一张桌子和第一排。要修复它,请使用for循环中的当前元素。
替换
List rowList = root.getChild("TABLEDATA").getChildren("ROW");
与
List rowList = table.getChildren("ROW");
和
List fieldList = root.getChild("TABLEDATA").getChild("ROW").getChildren("FIELD");
与
List fieldList = row.getChildren("FIELD");
答案 1 :(得分:1)
您可以使用XPath(XML路径语言)而不是使用DOM, http://www.vogella.com/articles/JavaXML/article.html