xml(Dom4J)解析原理及代码--Dom4J学习小计

Dom4J解析xml原理:简单地说,就是通过解析器将整个文档读取到Document对象中(加载成Document树),然后通过Document对象中可以获取到节点(Node)对象(Node对象有几种分类:标签、属性、文本和注释),得到了Node对象,就可以对整个xml进行解析了。


解析(将原xml原样输出)的代码如下:

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


import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.Text;
import org.dom4j.io.SAXReader;
import org.junit.Test;




public class readXmlFile {
@Test
public void readXmlFile() throws Exception{
SAXReader reader = new SAXReader();//获取解析器
Document doc = reader.read(new File("./xmlFile/contact.xml"));//读取xml文档
Element elem = doc.getRootElement();//首先获得根节点
StringBuffer sb = new StringBuffer();
getAllChildren(elem,sb);//获取根节点下所有的节点
System.out.println(sb);//输出解析的结果
}

public void getAllChildren(Element elem,StringBuffer str){
str.append("<"+elem.getName());//输出当前节点的名称
List<Attribute> list = elem.attributes();//查询当前标签的所有属性
if(list != null){//如果不为空,则遍历所有属性
for(Attribute attr:list){
str.append(" "+attr.getName()+"=\""+attr.getText()+"\"");
}
}
str.append(">");
Iterator<Node> nodes = elem.nodeIterator();//获取当前节点下的所有子节点
while(nodes.hasNext()){
Node node = nodes.next();
if(node instanceof Element){//如果是标签节点,则递归进行解析
getAllChildren((Element)node, str);
}
if(node instanceof Text){//如果是文本节点,则输出
str.append(node.getText());
}
}
str.append("</"+ elem.getName() +">");
}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值