XML文档的解析

XML文件的创建和解析常用的主要有4种,下面以xml文件为例进行说明:

<?xml version="1.0" encoding="utf-8"?>
<dict>
    <record>
        <row>
            <field name="dictname" value="Sex" describe="性别"></field>
            <field name="dictitem" value="0000"></field>
       </row>
       <row>
           <field name="dictname" value="Province" describe="省市"></field>
           <field name="dictitem" value="0001"></field>
       </row>
   </record>
</dict>

1、Dom(Document Object Model)创建和解析XML文档:

描述:将整个xml文件解析成一个Dom树存放在内存中,然后通过程序去访问内存中的树信息。

优点:树存在内存中,操作上相对简单,可支持删除、修改和排序。

缺点:内存消耗大,硬件要求高。

Dom API解析XML的步骤:

A、扫描XML文件,获取输入流对象:

      InputStream in = new FileInputStream(sFileName);

B、创建解析器对象:

      DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

      DocumentBuilder builder = factory.newDocumentBuilder();

C、解析文件流,获得Document对象:

     Document document = builder.parse(in);

D、根据获得的Document对象,获取节点信息。

代码实现请参考附件DomUtils.java

2、SAX(Simple API for XML)创建和解析XML文档:

描述:事件驱动,解析器发现元素开始、元素结束及文档的开始和结束时,会通知处理事件。我们只需要利用代码响应事件就可实现文档的处理。

优点:占用资源少(不需要加载整个文档),解析器代码小。

缺点:不持久,事件后没保存数据则数据丢失;无状态,事件只能得到文本,却不知文本所属元素。

SAX解析XML的步骤:

A、创建SAXParserFactory实例:

      SAXParserFactory  factory = SAXParserFactory.newInstance();

B、创建SAXParser实例;

C、创建SAXReader实例:

      XmlReader reader = factory.newSAXParser().getXMLReader();

D、XMLReader加载XML,解析XML。

代码实现请参考附件SaxUtils.java。

3、Dom4j创建和解析XML文档:

描述:Dom4j具有丰富的Java XML API,拥有性能优异,功能强大(拥有本地的XPath支持),使用简单的特性。

Dom4j解析XML文件的步骤:

A、读取文件:

      File file = new File(String sFileName);

B、创建XMLReader:

      XMLReader reader = new XMLReader();

C、解析XML,获取Document:

      Document document = reader.read(file);

D、解析文档Dom,获取节点及属性值。

代码实现请参考附件Dom4jUtils。

4、JDom创建和解析XML文档:

描述:20-80原则,大大减少了代码量。底层是使用SAX(最常用)、DOM、Xanan文档实现。

JDom解析XML文件的步骤:

A、创建解析器:

      SAXBuilder builder = new SAXBuilder(false);

B、得到Document文档:

      Document document = builder.build(xmlpath);

C、获取根节点:

      Element root = document.getRootElemnet();

D、遍历获得节点信息:

      root.getChildren();

    

代码实现请参考附件JDomUtils。

5、Apache Commons Degister解析XML:

描述:Degister由"事件"驱动,通过调用预定义的规则操作对象栈,将XML文件转换为Java对象。

原理:底层采用SAX解析XML,识别出特定XML元素(实际被细分为begin、body、end、finish四个时点),执行特定的动作(创建特定的Java对象,或调用特定对象的方法)。

           XML元素根据匹配模式(matching pattern)识别,而相关操作由规则(rule)定义。转换过程中,Digester维持了一个对象栈,用来存放转换中生成的、或是为转换临时创建

           的Java对象。对输入XML文件作了一趟完整的扫描后,对象栈的栈顶元素即为目标对象。

优点:Degister屏蔽了Sax的解析细节,仅关注解析本身,大大简化了转换操作。

注:工具类基本能满足所有的XML文档操作。

猜你喜欢

转载自keep-going.iteye.com/blog/1838181