dom
DOM(Document Object Model 文档对象模型)
关键字:文档树(Document)
优点: 把xml文件在内存中构造树形结构,可以遍历和修改节点
缺点: 如果文件比较大,内存有压力,解析的时间会比较长
SAX(Simple API for Xml 基于XML的简单API)
关键字:流(Stream)
把xml文件作为输入流,触发标记开始,内容开始,标记结束等动作
优点: 解析可以立即开始,速度快,没有内存压力
缺点: 不能对节点做修改
JDOM / DOM4J :目前市场上常用的2种解析XML文件的API
dom4j-1.6.1.jar 结合了DOM和SAX两种解析方式的优点
读取xml
SAXReader reader=new SAXReader();---获得解析器
File f=new File("src/book.xml");---指定解析文件
//构造文档树并且返回
Document document=reader.read(f);
//获得根元素
Element rootElement=document.getRootElement();
获得book元素
List<Element> list=rootElement.elements("book");
Iterator<Element> it=list.iterator();
//打印信息
while(it.hasNext()){
Element e=it.next();
System.out.println(e.elementText("title"));
System.out.println(e.elementText("author"));
System.out.println(e.elementText("price"));
}
打印属性
while(it.hasNext()){
Element e=it.next();
List att=e.attributes();
Iterator attit=att.iterator();
while(attit.hasNext()){
Attribute atts=(Attribute) attit.next();
System.out.println(atts.getName()+" "+atts.getValue());
}
}
Iterator attit=e.attributeIterator();----简写,直接写入Iterator
dom 4j写入xml文件
常用API方法:
1) 给元素增加子元素: elmt.addElement( "标记名称" ) ;
2) 给元素增加属性: elmt.addAttribute( "属性名" , "属性值" ) ;
3) 给叶子元素设值: elmt.setText( "元素值" ) ;
//1创建空文档
Document doc=DocumentHelper.createDocument();
//添加根元素
Element root=doc.addElement("书记列表");
//在根元素上添加元素
Element book=root.addElement("武侠小说");
Element title=book.addElement("书名");
Element author=book.addElement("作者");
//设置类容
title.setText("天龙八部");
author.setText("金庸");
//添加属性
book.addAttribute("bookNo","1001");
book.addAttribute("hot","true");
写入开始
//创建写入流用于写入数据
FileWriter writer=new FileWriter(fileName);
//设置编码格式
OutputFormat ou=OutputFormat.createPrettyPrint();
ou.setEncoding("gb2312");
//XMLWriter写出xml文件
XMLWriter xmlWriter=new XMLWriter(writer,ou);
xmlWriter.write(doc);
xmlWriter.close();