java与xml之JDOM生成和解析XML文档

来源:互联网 发布:二代身份证相片 软件 编辑:程序博客网 时间:2024/05/01 03:42

JDOM的目的是成为Java特定文档模型,它简化与XML的交互并且比使用DOM实现更快。由于是第一个Java特定模型,JDOM一直得到大力推广和促进。正在考虑通过“Java规范请求JSR-102”将它最终用作“Java标准扩展”。从2000年初就已经开始了JDOM开发。

   
JDOM与DOM主要有两方面不同。首先,JDOM仅使用具体类而不使用接口。这在某些方面简化了API,但是也限制了灵活性。第二,API大量使用了Collections类,简化了那些已经熟悉这些类的Java开发者的使用。

    JDOM文档声明其目的是“使用20%(或更少)的精力解决80%(或更多)Java/XML问题”(根据学习曲线假定为20%)。JDOM对于大多数
Java/XML应用程序来说当然是有用的,并且大多数开发者发现API比DOM容易理解得多。JDOM还包括对程序行为的相当广泛检查以防止用户做任何在XML中无意义的事。然而,它仍需要您充分理解XML以便做一些超出基本的工作(或者甚至理解某些情况下的错误)。这也许是比学习DOM或JDOM接口都更有意义的工作。

   
JDOM自身不包含解析器。它通常使用SAX2解析器来解析和验证输入XML文档(尽管它还可以将以前构造的DOM表示作为输入)。它包含一些转换器以将JDOM表示输出成SAX2事件流、DOM模型或XML文本文档。JDOM是在Apache许可证变体下发布的开放源码。

为减少DOM、SAX的编码量,出现了JDOM;

优点:20-80原则,极大减少了代码量。使用场合:要实现的功能简单,如解析、创建等,但在底层,JDOM还是使用SAX(最常用)、DOM、Xanan文档。

package com.mdy.xml.xmldemo;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.util.List;import org.jdom.Attribute;import org.jdom.Document;import org.jdom.Element;import org.jdom.JDOMException;import org.jdom.input.SAXBuilder;import org.jdom.output.Format;import org.jdom.output.XMLOutputter;public class JDomDemo{public static void main(String[] args) {String fileName = "jdomDemo.xml";JDomDemo dom4jDemo = new JDomDemo();dom4jDemo.createXML(fileName);dom4jDemo.parserXML(fileName);}public void createXML(String fileName) {Element root = new Element("books");Document document = new Document(root);// 循环创建三本书for(int i = 0;i<3;i++){Element book = new Element("book");book.setAttribute("id", (i+1)+"");Element bookName = new Element("name");bookName.setText("书本"+i);Element bookPrice = new Element("price");bookPrice.setText((i+1)*50+"");Element bookAuthor = new Element("author");bookAuthor.setText("作者"+i);Element seller = new Element("seller");Element sellerName = new Element("sellerName");Element sellerName2 = new Element("sellerName");sellerName.setText("张三");sellerName2.setText("李四");seller.addContent(sellerName);seller.addContent(sellerName2);book.addContent(bookName);book.addContent(bookPrice);book.addContent(bookAuthor);book.addContent(seller);root.addContent(book);} Format format = Format.getCompactFormat();      format.setEncoding("UTF-8");      format.setIndent("    ");  XMLOutputter xmlOutputter = new XMLOutputter(format);// XMLOutputter xmlOutputter = new XMLOutputter();try {xmlOutputter.output(document, new FileOutputStream(fileName));} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}public void parserXML(String fileName) {SAXBuilder builder = new SAXBuilder(false);try {Document document = builder.build(new FileInputStream(fileName));Element root = document.getRootElement();getNode(root);//采用循环遍历的方式,解析每个节点} catch (FileNotFoundException e) {e.printStackTrace();} catch (JDOMException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}public void getNode(Element node){if(node.isRootElement()){System.out.println("根节点:"+node.getName());}else{if(node.getText() != null && !"".equals(node.getText().trim())){System.out.print("解析节点:"+node.getName());System.out.println("--->"+node.getText());}else{System.out.println("解析节点:"+node.getName());}}List attList = node.getAttributes();for(int j = 0;j<attList.size();j++){Attribute attribute = (Attribute) attList.get(j);System.out.println("   属性-->"+attribute.getName()+":"+attribute.getValue());}List list = node.getChildren();for(int i = 0;i<list.size();i++){getNode((Element) list.get(i));}}}

运行结果

生成的jdomDemo.xml文件如下:


<?xml version="1.0" encoding="UTF-8"?><books>    <book id="1">        <name>书本0</name>        <price>50</price>        <author>作者0</author>        <seller>            <sellerName>张三</sellerName>            <sellerName>李四</sellerName>        </seller>    </book>    <book id="2">        <name>书本1</name>        <price>100</price>        <author>作者1</author>        <seller>            <sellerName>张三</sellerName>            <sellerName>李四</sellerName>        </seller>    </book>    <book id="3">        <name>书本2</name>        <price>150</price>        <author>作者2</author>        <seller>            <sellerName>张三</sellerName>            <sellerName>李四</sellerName>        </seller>    </book></books>


解析生成的xml文档如下:

根节点:books解析节点:book   属性-->id:1解析节点:name--->书本0解析节点:price--->50解析节点:author--->作者0解析节点:seller解析节点:sellerName--->张三解析节点:sellerName--->李四解析节点:book   属性-->id:2解析节点:name--->书本1解析节点:price--->100解析节点:author--->作者1解析节点:seller解析节点:sellerName--->张三解析节点:sellerName--->李四解析节点:book   属性-->id:3解析节点:name--->书本2解析节点:price--->150解析节点:author--->作者2解析节点:seller解析节点:sellerName--->张三解析节点:sellerName--->李四


不过JDOM需要引入jar包:jdom.jar

0 0
原创粉丝点击