您的位置:首页 > 其它

xml解析相关内容 dom4j

2011-11-09 17:27 447 查看
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();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: