xml解析相关内容 dom4j

本文介绍了DOM和SAX两种XML解析方式的特点及使用场景,详细讲解了JAXP如何为不同厂家的解析器提供统一的接口,并展示了dom4j中SAXReader和DOMReader的具体用法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

DOM解析需要把XML文档全部载入内存并且在内存中生成DOM树节点对象。
SAX解析用事件驱动的方式当载入XML文档时就开始解析。

关于JAXP
即java API For XML Process
如果没有JAXP,那么对于每个厂家的解析器,都要根据厂家实现类的不同而改变
如XMLReader reader=new A厂家();
有了JAXP后等于在厂家解析器和应用程序之间提供了一层抽象,尽管JAXP没提供新的方法,
如对于SAX解析方式,有了JAXP就可以实现为:
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParserFactory是一抽象类,由厂家解析器去继承生成特定解析器的工厂
然后由 SAXParser parser = factory.newSAXParser();生成解析器实例
这样当要换掉解析器时,应用程序不必修改代码.
对于DOM解析则主要依赖DocumentBuilderFactory这个抽象类

dom4j用的是SAX解析器分析XML文档,它提供了DOMReader和SAXReader解析的方式,DOMReader是将dom模型转换为DOM4j数据结构,而SAXReader用SAX解析的方式来获取数据,如下代码:
1.SAXReader reader =new SAXReader();
reader.addHandler("/people/name",new MyHandler());
reader.read(new File("\\info.xml"));

2.SAXReader reader =new SAXReader();
Document document=reader.read(new File("\\info.xml"));
doc.accept(new MyVisitor());

3.SAXReader reader =new SAXReader();
Document document=reader.read(new File("\\info.xml"));

第一种方式是用添加元素处理器的方式,让处理器类实现ElementHandler接口 实现其onStart(ElementPath path)和onEnd(ElementPath path) 即当解析器处理到addHandler("",...)指定的元素时调用事件处理器.这种方式是基于事件的.不必等到文档解析完毕才处理.
第二种方式是通过访问者模式访问XML数据,处理类实现Visitor接口或者继承实现了Visitor接口的VisitorSuppert对象,
实现对应的visit方法.
第三种是dom4j内部用sax解析获得数据对象后换转为dom4j文档对象.

1.dom4j输出

a.转换为dom对象输出

DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
   DocumentBuilder db=dbf.newDocumentBuilder();
   DOMWriter write=new DOMWriter();
   Document d=write.write(document);//转化为dom模型对象
   DOMSource source=new DOMSource(d);
   StreamResult result=new StreamResult(new File("DOM4J.xml"));//创建文件对象接收数据
   TransformerFactory tff=TransformerFactory.newInstance();
   Transformer tf=tff.newTransformer();
   tf.transform(source, result);//dom模型数据输出到指定文件中

b.转换为xml数据流输出

//格式化对象

OutputFormat format=OutputFormat.createPrettyPrint();
  format.setEncoding("GB2312");
  format.setIndent("  ");
  XMLWriter writer=new XMLWriter(new FileWriter("DOM4J.xml"),format);
  writer.write(document);
  writer.close();

 

2.dom4j解析

a,SAXReader

接收xml文件

SAXReader reader=new SAXReader();

reader.read("");

b.DOMReader

接收dom对象转化为dom4j的document对象

DOMReader reader=new DOMReader();

org.dom4j.Document document=reader.read();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值