【发布时间】:2011-10-20 23:03:55
【问题描述】:
如何改进 GWT 中的 xml 解析?
我的 xml 如下,有 1 条记录
解析 100 条记录 GWT 需要 8 秒
有什么方法可以提高性能吗?请查看我的 gwt 代码来解析 xml
12345678价值>
记录>
我的GWT解析代码如下:
私有静态列表 parseRecords(文档 mainDOM, 列出记录){ NodeList recordNodeList = mainDOM.getElementsByTagName("Record"); //记录节点 RecordInfo 记录信息= null;
for(int i=0;i<recordNodeList.getLength();i++){ //iteration over record node
recordInfo = new RecordInfo();
recordInfo.setColumnCount(columnInfoList.size());
recordInfo.setColumnInfoList(columnInfoList);
HashMap<String, String> recordsColumnValueHashMap = new HashMap<String, String>();
Element element = ((Element)recordNodeList.item(i)); //Record node
NamedNodeMap recNodeMap = recordNodeList.item(i).getAttributes();
if(i==0){
}else{
recordInfo.setProductid(recNodeMap.getNamedItem("productid").getNodeValue());
recordInfo.setProductidext(recNodeMap.getNamedItem("productidext").getNodeValue());
recordInfo.setProductkeyid(recNodeMap.getNamedItem("productkeyid").getNodeValue());
recordInfo.setProductversion(Integer.parseInt(recNodeMap.getNamedItem("productversion").getNodeValue()));
recordInfo.setFEDRecord(Boolean.parseBoolean(recNodeMap.getNamedItem("isFEDRecord").getNodeValue()));
recordInfo.setValidationstatus(recNodeMap.getNamedItem("validationstatus").getNodeValue());
recordInfo.setSelected(Boolean.parseBoolean(recNodeMap.getNamedItem("selected").getNodeValue()));
recordInfo.setAccessmode(recNodeMap.getNamedItem("accessmode").getNodeValue());
recordInfo.setIsedited(recNodeMap.getNamedItem("isedited").getNodeValue());
NodeList recList = element.getElementsByTagName("RecordAttribute");
for(int j=0;j<recList.getLength();j++){ //iterating all record attributes
NodeList child = recList.item(j).getChildNodes();
recordInfo.setColumnNameInRecord(recList.item(j).getAttributes().getNamedItem("name").getNodeValue()); recordInfo.setColumnInRecordEdited(Boolean.parseBoolean(recList.item(j).getAttributes().getNamedItem("edited").getNodeValue())); for(int k=0;k
if("Value".equalsIgnoreCase(child.item(k).getNodeName())){
if(child.item(k).getFirstChild()!=null){
String value = child.item(k).getFirstChild().getNodeValue();
//System.out.println("Value = "+child.item(k).getFirstChild().getNodeValue());
recordInfo.setValue(value);
String columnName = recList.item(j).getAttributes().getNamedItem("name").getNodeValue();
recordsColumnValueHashMap.put(columnName, value);
}
}
if("OldValue".equalsIgnoreCase(child.item(k).getNodeName())){
if(child.item(k).getFirstChild()!=null){
String oldValue = child.item(k).getFirstChild().getNodeValue();
//System.out.println("oldValue ="+child.item(k).getFirstChild().getNodeValue());
recordInfo.setOldValue(oldValue);
}
}
}
}
recordInfo.setRecordHashMap(recordsColumnValueHashMap);
}
records.add(recordInfo);
}
return records;
}
【问题讨论】:
标签: java xml gwt xml-parsing