操作环境:Exclipse luna +dom4j-1.6.1+java
操作xml文件,很早就做过了,今天又重新写了一个小样,来整理一下。
首先,我们用java来操作xml文件,一般有两种方式。一种是DOM, 另一种是SAX. SAX 和DOM 在实现过程中,分别侧重于不同的方法满足不同的需求。
其中,Dom的优点在于可以实现随机访问,其原理在于dom会将文档的逻辑结构(包括文档的根、元素、元素内容、属性、属性值)等都以对象模型的形式保存到内存中,所以可以以任何顺序来访问xml元素。而Sax是提供了对xml文档的顺序访问模式,这种模式的好处之一是访问速度很快,它是基于事件的,不需要全部加载到内存,所以所需的系统资源较少,可以用来分析大型的xml文档,比较高效。
【我们这里演示的是第一种方式。】
按照惯例,我们首先强调几个可能会出现的问题。
1.记得导入dom4j的jar包。
2.在写xml文档的时候,可能会出现中文乱码问题,这一点的解决方式有多种,附一篇笔者看到的文档,很详细。
http://blog.csdn.net/centralperk/article/details/6433561
3.如果解析文档的路径使用的是相对路径,建议放到与java文件同一个包下。
- 供解析的xml文档:
解析的效果图:
5.测试生成的xml文档的效果图,默认放在D盘根目录下
6.下面上干货
package com.sinotimes.soft.xml;
import java.security.KeyStore.Entry.Attribute;
import java.util.List;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import javax.sql.rowset.spi.XmlWriter;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import org.w3c.dom.NodeList;
public class xmlTest {
//构造函数
public void xmlTest(){
}
//解析xml
public void readXml(){
SAXReader saxReader = new SAXReader();
try {
Document document = saxReader.read(new File("NewFile.xml"));
//获取根元素
Element root = document.getRootElement();
List <Element> childNode = root.elements();
if(childNode !=null){
for(int i=0;i<childNode.size();i++){
System.out.println("----这是第"+i+"本书的信息----");
Element book = childNode.get(i);
System.out.println("类别:"+book.attributeValue("category"));
System.out.println("书籍名称:"+book.elementText("name"));
System.out.println("价格:"+book.elementText("price"));
System.out.println("出版社:"+book.elementText("publisher"));
}
}
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//写xml
public void createXml() {
String nameStr,weighStr,tallStr;
//创建文档对象
Document document = DocumentHelper.createDocument();
Element root = document.addElement("students");
for(int i=0;i<4;i++){
if(i==0){
nameStr = "李明";
weighStr = "65kg";
tallStr = "178cm";
}else if(i==1){
nameStr = "张磊";
weighStr = "70kg";
tallStr = "183cm";
}else if(i==2){
nameStr = "刘潇潇";
weighStr = "53kg";
tallStr = "168cm";
}else{
nameStr = "赵媛媛";
weighStr = "55kg";
tallStr = "172cm";
}
Element student = root.addElement("student");
student.addAttribute("ID", "学生"+i);
student.addElement("name",nameStr);
student.addElement("weight",weighStr);
student.addElement("tall",tallStr);
}
try {
Writer fileWriter = new FileWriter("D:\\student.xml");
OutputFormat format = OutputFormat.createPrettyPrint(); //控制显示xml元素换行,为了美观作用
format.setEncoding("gb2312");
XMLWriter xmlWriter = new XMLWriter(fileWriter,format);
xmlWriter.write(document);
xmlWriter.close();
System.out.println("create end!");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String args[]) throws Exception{
xmlTest mXMLTest = new xmlTest();
//解析xml
// mXMLTest.readXml();
//生成xml
mXMLTest.createXml();
}
}