开发过程中,操作xml文件是很常见的,虽然Java API中提供了很多操作XML文件的的帮助类,我比较喜欢的是用Dom4j操作,在此分享下。
首先我们得下载dom4j.jar包,如需要下载,可到文章下面的附件中下载
首先介绍下如何创建一个xml文件,贴上我的代码,上面都有详细的注释
package test.xml.dom4j;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;
public class Test1 {
public static void main(String[] args) throws IOException {
//创建docment对象
//Document doc=DocumentHelper.createDocument();
//创建document根元素
//Element root=DocumentHelper.createElement("student");
//将根元素添加到根节点上去
//doc.setRootElement(root);
//第二种方式
Element root1=DocumentHelper.createElement("persons");
Document doc1=DocumentHelper.createDocument(root1);
Element student1=null;
for(int i=0;i<10;i++){
student1=root1.addElement("person");
student1.addAttribute("id","s00"+i);
//addElement返回原操作的元素
student1.addElement("name").setText("张三"+i);
}
//输出文档到控制台
XMLWriter xmlwriter=new XMLWriter();
xmlwriter.write(doc1);
//输出文档到指定路径(默认的格式)
OutputStream os=new FileOutputStream("Doc/person.xml");
XMLWriter xw=new XMLWriter(os);
xw.write(doc1);
//输出文档(自定义格式)
OutputStream os1=new FileOutputStream("Doc/person.xml");
//换行显示,并且缩进两个空格
OutputFormat format1=new OutputFormat(" ",true);
XMLWriter xw1=new XMLWriter(os1,format1);
xw1.write(doc1);
xw1.close();
}
}
读取xml文件
package test.xml.dom4j;
import java.io.FileInputStream;
import java.util.Iterator;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public class Test2 {
public static void main(String[] args) throws Exception {
//构建saxreader对象
SAXReader sr=new SAXReader();
//获得项目路径下的student.xml
String path=System.getProperty("user.dir")+"/Doc/student.xml";
System.out.println("path----"+path);
Document doc=sr.read(new FileInputStream(path));
//获得xml文件的根节点
Element root=doc.getRootElement();
//获得根节点的名字
System.out.println(root.getName());
//获得student元素的集合
List<Element> list=root.elements("student");
System.out.println(list.size());
//遍历student节点的集合
Iterator<Element> it=list.iterator();
while(it.hasNext())
{
//获得每一个student的节点
Element e=(Element)it.next();
//获得student的id属性
System.out.println(e.attributeValue("id"));
//获得每个student元素的name子节点
e=e.element("name");
//取得name节点的值
System.out.println(e.getData());
}
}
}
也就这么多,有什么不明白的可以提出来,呵呵。