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--->李四
- java与xml之JDOM生成和解析XML文档
- java与xml之JDOM生成和解析XML文档
- JDom解析和生成XML文档
- JDom解析和生成XML文档
- JDom解析和生成XML文档
- JDom解析和生成XML文档
- java与xml之DOM4J生成和解析XML文档
- java与xml之DOM4J生成和解析XML文档
- java解析与生成xml(三): JDOM
- Java 生成 XML 文档|JDOM
- JDOM生成和解析XML
- Jdom生成和解析xml
- XML文档解析之JDOM解析
- jdom解析xml文档
- jdom解析xml文档
- JDOM解析XML文档
- Jdom解析XML文档
- jdom解析xml文档
- Android中使用网络通信工具类
- [LeetCode] 16. 3Sum Closest
- 安卓实战开发之JNI入门及高效的配置(android studio一键生成.h,so及方法签名)
- TableLayout 的collapseColumns、shrinkColumns、stretchColumns
- hdu 1069 Monkey and Banana DP
- java与xml之JDOM生成和解析XML文档
- Super Ugly Number
- Oracle函数及操作符
- Hibernate注解
- iOS 【在iOS中自动检测内存泄漏】
- java与xml之DOM4J生成和解析XML文档
- Best Time to Buy and Sell Stock III
- 教你玩转HelloWorld
- 关于MAC下mysql配置环境时丢失mysql.sock而自身无法生成问题的解决方案