当前位置:
文档之家› 最简单而强大读写xml的方法(DOM4J经典API)(学习自用备份)
最简单而强大读写xml的方法(DOM4J经典API)(学习自用备份)
//得到文档对象
Document doc =null;
try{
//指定编码,避免出现
InputStream isr =newFileInputStream (newFile ("class.xml"));
doc = reader.read(newInputStreamReader(isr,"GBK"));
XMLWriter out2 =newXMLWriter(out1,format);//指定格式
out2.write(doc);
out2.close();
}
}
修改文件
/**
*任务描述:将下面class.xml中id=02的节点中的文本改为“项目二部”,teacher改为“带头大哥”
<?xml version="1.0" encoding="GBK"?>
</root>
*/
packagechapter12.dom4j;
importjava.io.File;
importjava.io.FileInputStream;
importjava.io.FileWriter;
importjava.io.InputStream;
importjava.io.InputStreamReader;
for(inti = 0; i < listClass.size(); i++) {
//获取当前节点
Element ele = listClass.get(i);
//获取当前节点的名称和文本
sb.append(ele.getName() +"="+ ele.getText());
//获取属性值
sb.append(" id = "+ele.valueOf("@id"));
使用
重要说明
根据网上资料,目前DOM4j的功能最简单,最强大。JAXP、JDOM、DOM4j各种技术试一篇,觉得确实如此。所以隆重推荐本文。
所有代码全部可以运行,并且解决了读取xml时一个比较麻烦的异常:
org.dom4j.DocumentException: Error on line 1 of document Nested exception:
//创建文档对象
Document doc = DocumentHelper.createDocument();
//创建根节点<lovo></lovo>
Element root = doc.addElement("root");
//增加属性节点<root year="2008"></root>
root.addAttribute("year","2008");
sb.append(" teacher = "+ele.valueOf("@teacher"));
//获取父节点(文本、属性……)
sb.append(" year"+"="+ ele.getParent().valueOf("@year")+" \r");
}
System.out.println(sb.toString());
root.addElement("boss").addText("带头大哥");
//增加带属性和文本的子节点<class id="01" teacher="张三">一班</class>
root.addElement("class").addAttribute("id","01").addAttribute("teacher","张三").addText("一班");
e.printStackTrace();
}
//获取根节点
Element eleRoot = doc.getRootElement();
System.out.println("根节点:"+eleRoot.getName());
//lt;Element> listClass = doc.selectNodes("//root/class");
isr.close();
}catch(DocumentException e) {
e.printStackTrace();
}
//使用XPATH表达式获得节点列表
List<Element> list = doc.selectNodes("//root/class");
//创建一个迭代器.
for(Element ele:list){
//保存(指定编码)
FileWriter out1 =newFileWriter("class.xml");
OutputFormat format = OutputFormat.createPrettyPrint();//createCompactFormat,createPrettyPrint
format.setEncoding("GBK");
<root year="2008">
<boss>带头大哥</boss>
<class id="01" teacher="张三">一班</class>
<class id="02" teacher="李四">二班</class>
<class id="03" teacher="张三丰">三班</class>
}
}
读文件示例:
/**
*读取class.xml,内容如下:
<?xml version="1.0" encoding="GBK"?>
<root year="2008">
<boss>带头大哥</boss>
<class id="01" teacher="张三">一班</class>
<class id="02" teacher="李四">二班</class>
publicclassReadDemo {
publicstaticvoidmain(String[] args)throwsException {
StringBuffer sb =newStringBuffer();
SAXReader reader =newSAXReader();
//得到文档对象
Document doc =null;
org.xml.sax.SAXParseException: Invalid encoding name "GBK".
项目所需jar包见:/blog/251276
本文档包含四个部分:
写XML示例
修改XML
读XML示例
任务描述:使用递归,完成对任何xml文件的读取
//}
//使用JDK1.5中的for each循环完成上面代码的功能(对比学习)
for(Attribute att:list){
System.out.println(att.getName()+"="+att.getValue());
}
}
}
递归
/**
*任务描述:使用递归,完成对任何xml文件的读取
*/
teacher=张三
teacher=李四
teacher=张三丰
*/
packagechapter12.dom4j;
importjava.io.File;
importjava.io.FileInputStream;
importjava.io.InputStream;
importjava.io.InputStreamReader;
importorg.dom4j.DocumentHelper;
importorg.dom4j.Element;
importorg.dom4j.io.OutputFormat;
importorg.dom4j.io.XMLWriter;
publicclassWriteDemo {
publicstaticvoidmain(String[] args)throwsException {
String id = ele.valueOf("@id");
if(id!=null&& id.equals("02")){
ele.setText("项目二部");
ele.setAttributeValue("teacher","带头大哥");
}
}
//保存(指定编码)
FileWriter out1 =newFileWriter("class.xml");
<class id="02" teacher="李四">二班</class>