> 生活笔记  > python
dom4j列表方式解析xml

XML解析技术有两种 DOM SAX

DOM方式

根据XML的层级结构在内存中分配一个树形结构,把XML的标签,属性和文本等元素都封装成树的节点对象

优点: 便于实现增 删 改 查

缺点: XML文件过大可能造成内存溢出

SAX方式

采用事件驱动模型边读边解析:从上到下一行行解析,解析到某一元素, 调用相应解析方法

优点: 不会造成内存溢出,

缺点: 查询不方便,但不能实现 增 删 改

不同的公司和组织提供了针对DOM和SAX两种方式的解析器

SUN的jaxp

Dom4j组织的dom4j(最常用:如Spring)

JDom组织的jdom

这里演示一下利用dom4j的列表方式解析xml

xml文件

<?xml version="1.0" encoding="UTF-8"?> 
<books> 
   <book id="1"> 
      <title>book1</title> 
      <author>tom</author> 
   </book> 
   <book id="2"> 
      <title>book2</title> 
      <author>dav</author> 
   </book> 
</books>
package cn.xjie.list;

import java.io.File;
import java.util.List;

import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

/**
 * dom4j解析xml 列表方式解析
 * @author xjie
 *
 */
public class Dom {
	public static void main(String[] args) {
		try {
			SAXReader reader = new SAXReader();
			//从类路径(src)下加载xml文件
			File file = new File(Dom.class.getClassLoader().getResource("book.xml").getPath());
			Document document = reader.read(file);
			Element root = document.getRootElement();
			List<Element> childs = root.elements();
			for(Element child : childs){
				//未知属性名情况下
				List<Attribute> attrs = child.attributes();
				for(Attribute attr : attrs){
					System.out.println(attr.getName()+":"+attr.getValue());
				}
				
				//已知属性情况下
				System.out.println("id:"+child.attributeValue("id"));
				
				//未知子元素名情况下
				List<Element> elements = child.elements();
				for(Element e : elements){
					System.out.println(e.getName()+":"+e.getText());
				}
				
				//已知子元素名的情况下
				System.out.println("title"+child.elementText("title"));
				System.out.println("author"+child.elementText("author"));
			}
		} catch (DocumentException e) {
			e.printStackTrace();
		}
	}
}


1条评论
用户头像
xjie
好好学习,天天向上!

12月2日    回复     顶(1)     举报

猜你喜欢
精品推荐
扫二维码,加好友一起学习吧!