最近项目需要操作xml文件,虽然以前也研究过dom4j,但一者是因为时间太长了,因没写文档,有些忘记了,再者想再整理下,优化下dom4j的使用.所以就查了些资料,然后进行了些总结.(ps:因文档网上已经很多了,所以在这里主要是我现在正使用的代码)
主要实现功能:
从示例xml中根据pid查找对应的data数据
<root name="数据" title="客户数据"> <item> <date>2009-02-13</date> <pid>1001</pid> <data>9</data> </item> <item> <date>2009-02-13</date> <pid>1017</pid> <data>594</data> </item> </root>
/**
* @author sech
*
* @version 1.0
*/
public class XmlDom4J {
private static final Log logger = LogFactory.getLog(XmlDom4J.class);
private Document document;
private List nodeList;
private Node root;
public XmlDom4J(String inputXml) {
try {
SAXReader saxReader = new SAXReader();
document = saxReader.read(inputXml);
root = document.selectSingleNode("//root"); //先将数据放入root,这样若多次取对应pid的数据,
//不用每次都先访问xml了
} catch (DocumentException e) {
logger.error(e.getMessage());
} catch (Exception e) {
logger.error(e.getMessage());
}
}
/**
* 取得对应pid的data
*/
private int getDataOfPid(String pid) {
nodeList = root.selectNodes("//item[pid='" + pid + "']/data");//取pid的data数据
if (nodeList != null && nodeList.size() > 0) {
Element e = (Element) nodeList.get(0);
return Integer.parseInt(e.getTextTrim());
}
return 0;
}
}
若xml数据改为:
<?xml version="1.0" encoding="gbk"?> <root name="数据" title="客户数据"> <item> <date>2009-02-13</date> <data pid="1001">9</data> </item> <item> <date>2009-02-13</date> <data pid="1017">594</data> </item> </root>
则获取代码为:
/**
* 取得账号的data
*/
private int getDataOfPid2(String pid) {
nodeList = root.selectNodes("//item/data[@pid='" + pid + "']");//若item还有属性,
//则可以为"//item[@新属性='新属性值']/data[@pid='pid值']"
if (nodeList != null && nodeList.size() > 0) {
Element e = (Element) nodeList.get(0);
return Integer.parseInt(e.getTextTrim());
}
return 0;
}