四种方法解析XML文档:Dom、SAX、JDOM、dom4j         

1、了解XML

XML,即可扩展标记语言(Extensible Markup Language),标准通用标记语言的子集,一种用于标记电子文件使其具有结构性的标记语言。它可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。 它非常适合万维网传输,提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据。它和JSON都是一种数据交换格式。

作用:解析XML文档,创建XML文档。

2、什么是可扩展标记语言?

· 可扩展标记语言是一种很像超文本标记语言的标记语言。

· 它的设计宗旨是传输数据,而不是显示数据。

· 它的标签没有被预定义。您需要自行定义标签。

· 它被设计为具有自我描述性。

· 它是W3C的推荐标准。

3、解析XML文档的四种方式: 四种方法解析XML文档:Dom、SAX、JDOM、dom4j         

第一种:DOM的全称是Document Object Model,也即文档对象模型。在应用程序中,基于DOM的XML分析器将一个XML文档转换成一个对象模型的集合(通常称DOM树),应用程序正是通过对这个对象模型的操作,来实现对XML文档数据的操作。通过DOM接口,应用程序可以在任何时候访问XML文档中的任何一部分数据,因此,这种利用DOM接口的机制也被称作随机访问机制。

4.1、开始动手

第一种:DOM的XML文件读取:——看注释

1.DocumentBuilderFactory.newInstance()  创建DocumentBuilderFactory的对象

2.DocumentBuilder    获得具体的DOM解析器。

3. Parse(  new File() )  获取文档xml路径。

4.1.1准备XML文档:这里我用的是languages.xml

  1. <span style="background-color: rgb(255, 255, 255);"><?xml version="1.0" encoding="UTF-8"?>
  2. <Languages cat="it">
  3. <lan id="1">
  4. <name>Java</name>
  5. <ide>Eclipse</ide>
  6. </lan>
  7. <lan id="2">
  8. <name>Swift</name>
  9. <ide>Xcode</ide>
  10. </lan>
  11. <lan id="3">
  12. <name>C#</name>
  13. <ide>Visual Studio</ide>
  14. </lan>
  15. </Languages></span>

 4.1.2看看DOM解析的例子

  1. <span style="background-color: rgb(255, 255, 255);">package dom;
  2. import java.io.File;
  3. import java.io.IOException;
  4. import javax.xml.parsers.DocumentBuilder;
  5. import javax.xml.parsers.DocumentBuilderFactory;
  6. import javax.xml.parsers.ParserConfigurationException;
  7. import org.w3c.dom.Document;
  8. import org.w3c.dom.Element;
  9. import org.w3c.dom.Node;
  10. import org.w3c.dom.NodeList;
  11. import org.xml.sax.SAXException;
  12. /*
  13. * DOM  Class  Reader
  14. *
  15. */
  16. public class ReaderXML {
  17. public static void main(String[] args) {
  18. try {
  19. //1。获取DOM 解析器的工厂实例。
  20. DocumentBuilderFactory factory  = DocumentBuilderFactory.newInstance();
  21. //2。获得具体的DOM解析器。
  22. DocumentBuilder builder = factory.newDocumentBuilder();
  23. //3。获取文件
  24. Document document = builder.parse(new File("languages.xml"));
  25. //4。获取根元素
  26. Element root = document.getDocumentElement();
  27. System.out.println("cat="+root.getAttribute("cat"));
  28. //5。获取根节点[有多个节点]
  29. NodeList list = root.getElementsByTagName("lan");
  30. for (int i = 0; i < list.getLength(); i++) {
  31. //Node lan = list.item(i);
  32. //System.out.println("id="+lan.getNodeType());
  33. System.out.println("---------------");
  34. Element lan =  (Element) list.item(i);
  35. System.out.println("id=" + lan.getAttribute("id"));
  36. //获取子节点集合
  37. NodeList clist = lan.getChildNodes();
  38. for (int j = 0; j < clist.getLength(); j++) {
  39. //获取下标
  40. Node c = clist.item(j);
  41. //把空格删除[获取属性名和值]
  42. if (c instanceof Element) {
  43. System.out.println(c.getNodeName()+"="+c.getTextContent());
  44. }
  45. }
  46. }
  47. } catch (ParserConfigurationException e) {
  48. e.printStackTrace();
  49. } catch (SAXException e) {
  50. e.printStackTrace();
  51. } catch (IOException e) {
  52. e.printStackTrace();
  53. }
  54. }
  55. }
  56. </span>

4.2第一种:DOM 的XML文件创建

1.DocumentBuilderFactory.newInstance()  获取DOM 解析器的工厂实例。

2. DocumentBuilder  获得具体的DOM解析器。

3.创建一个xml文档,获得Document对象(根结点)(createElement)。

4. 创建根元素、根结点、setAttribute ("根结点名");

5. 添加根节点的值:setTextContent(“Value”);

6.子节点添加到根节点:appendChild(“根结点”);

7.输出:TransformerFactory !

  1. <span style="background-color: rgb(255, 255, 255);">package dom;
  2. import java.io.File;
  3. import java.io.StringWriter;
  4. import javax.xml.parsers.DocumentBuilder;
  5. import javax.xml.parsers.DocumentBuilderFactory;
  6. import javax.xml.parsers.ParserConfigurationException;
  7. import javax.xml.transform.Transformer;
  8. import javax.xml.transform.TransformerException;
  9. import javax.xml.transform.TransformerFactory;
  10. import javax.xml.transform.dom.DOMSource;
  11. import javax.xml.transform.stream.StreamResult;
  12. import org.w3c.dom.Document;
  13. import org.w3c.dom.Element;
  14. /*
  15. * DOM Class Great
  16. *
  17. */
  18. public class Creat_XML {
  19. public static void main(String [] ags){
  20. try {
  21. DocumentBuilderFactory factory =  DocumentBuilderFactory.newInstance();
  22. DocumentBuilder builder = factory.newDocumentBuilder();
  23. Document document = builder.newDocument();
  24. //创建属性名、赋值
  25. Element root = document.createElement("Languages");
  26. root.setAttribute("cat", "it");
  27. //创建第一个根节点、赋值
  28. Element lan = document.createElement("lan");
  29. lan.setAttribute("id", "1");
  30. Element name = document.createElement("name");
  31. name.setTextContent("java");
  32. Element ide = document.createElement("IDE");
  33. ide.setTextContent("Eclipse");
  34. lan.appendChild(name);
  35. lan.appendChild(ide);
  36. <span style="font-size:14px;"></span><pre name="code" class="java">                 //创建第二个根节点、赋值
  37. Element lan2 = document.createElement("lan");
  38. lan2.setAttribute("id", "2");
  39. Element name2 = document.createElement("name");
  40. name2.setTextContent("Swift");
  41. Element ide2 = document.createElement("ide");
  42. ide2.setTextContent("XCode");
  43. lan2.appendChild(name2);
  44. lan2.appendChild(ide2);
  45. //添加到属性中、
  46. root.appendChild(lan);
  47. root.appendChild(lan2);
  48. document.appendChild(root);
  49. //定义了用于处理转换指令,以及执行从源到结果的转换的
  50. TransformerFactory transformerFactory = TransformerFactory.newInstance();
  51. Transformer transformer = transformerFactory.newTransformer();
  52. transformer.setOutputProperty("encoding", "UTF-8");
  53. StringWriter writer = new StringWriter();
  54. transformer.transform(new DOMSource(document), new StreamResult(writer));
  55. System.out.println(writer.toString());
  56. transformer.transform(new DOMSource(document), new StreamResult(new File("newxml.xml")));
  57. } catch (ParserConfigurationException | TransformerException e) {
  58. e.printStackTrace();
  59. }
  60. }
  61. }
  62. </span>

第二种:dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的,dom4j是一个十分优秀的JavaXML API,具有性能优异、功能强大和极其易使用的特点,同时它也是一个开放源代码的软件,可以在SourceForge上找到它。在IBM developerWorks上面还可以找到一篇文章,对主流的Java XML API进行的性能、功能和易用性的评测,所以可以知道dom4j无论在哪个方面都是非常出色的。如今可以看到越来越多的Java软件都在使用dom4j来读写XML,特别值得一提的是连Sun的JAXM也在用dom4j。这已经是必须使用的jar包, hibernate也用它来读写配置文件。

下载:dom4j架包!

第二种:Dom4j创建XML步骤:

1. 设置根节点: DocumentHelper.createElement("根节点名");

2. 读取doucment元素:DocumentHelper.createDocument(root);

3.添加根节点:addAttribute("name", "value");

4. 添加字节点、赋值:addElement("name");  setText("value");

5. 添加到根节点:XMLWriter xmlWriter = new XMLWriter();  xmlWriter.write(document);

  1. <span style="background-color: rgb(255, 255, 255);">package dom4j;
  2. import java.io.FileOutputStream;
  3. import org.dom4j.Document;
  4. import org.dom4j.DocumentHelper;
  5. import org.dom4j.Element;
  6. import org.dom4j.io.OutputFormat;
  7. import org.dom4j.io.XMLWriter;
  8. public class Greate_dom4j {
  9. public static void main(String[] args) throws Exception
  10. {
  11. // 创建文档并设置文档的根元素节点
  12. Element root = DocumentHelper.createElement("books");
  13. Document doucment = DocumentHelper.createDocument(root);
  14. //根节点
  15. root.addAttribute("name","bookvalue");
  16. //子节点
  17. Element element1 = root.addElement("author1 ");
  18. element1.addAttribute( "name", "James1" );
  19. element1.addAttribute( "location1", "UK1" );
  20. element1.addText( "James Strachan1" );
  21. Element element = root.addElement("author2 ");
  22. element.addAttribute( "name", "chen" );
  23. element.addAttribute( "kenken", "ZK" );
  24. element.addText( "chen kenken" );
  25. //添加
  26. XMLWriter xmlwriter2 = new XMLWriter();
  27. xmlwriter2.write(doucment);
  28. //创建文件
  29. OutputFormat format = new OutputFormat();
  30. FileOutputStream file = new FileOutputStream("books.xml");
  31. XMLWriter xml = new XMLWriter(file);
  32. xml.close();
  33. }
  34. }  </span>

第二种:Dom4j读取XML步骤:

1.获取SAM接口:SAXReader saxReader = new SAXReader();

2.获取XML文档:  Document doc =  saxReader.read(new File("name.xml"));

3.获取根节点:Element root = doc.getRootElement();

4.获取子节点:root.elementIterator();

5.获取孙节点: attributeIterator();

  1. <span style="background-color: rgb(255, 255, 255);">package dom4j;
  2. import java.io.File;
  3. import java.util.Iterator;
  4. import java.util.List;
  5. import org.dom4j.Attribute;
  6. import org.dom4j.Document;
  7. import org.dom4j.Element;
  8. import org.dom4j.io.SAXReader;
  9. /*
  10. * dom4j Class Reader
  11. *
  12. */
  13. public class Rreader_dom4j{
  14. public static void main(String[] args) throws Exception{
  15. //1.获取SAM接口:
  16. SAXReader saxReader = new SAXReader();
  17. //2.获取XML文件:
  18. Document doc = saxReader.read(new File("newxml.xml"));
  19. //3.获取根节点:
  20. Element root = doc.getRootElement();
  21. System.out.println("根节点: " + root.getName());
  22. System.out.println("----------------");
  23. //获取子节点
  24. Iterator<?> it = root.elementIterator();
  25. while(it.hasNext()){
  26. Element elem = (Element) it.next();
  27. //获取属性名属性值
  28. List<Attribute> li = elem.attributes();
  29. for (Attribute att : li ) {
  30. System.out.println(att.getName() + "  " + att.getValue() );
  31. }
  32. //获取子节的子节点
  33. Iterator<?> ite = elem.elementIterator();
  34. while(ite.hasNext()){
  35. Element child = (Element) ite.next();
  36. System.out.println(child.getName() + "  " + child.getStringValue());
  37. }
  38. System.out.println("----------------");
  39. }
  40. }
  41. }
  42. </span>

第三种:JDOM是一个开源项目,它基于树型结构,利用纯JAVA的技术对XML文档实现解析、生成、序列化以及多种操作。JDOM 直接为JAVA编程服务。它利用更为强有力的JAVA语言的诸多特性(方法重载、集合概念等),把SAX和DOM的功能有效地结合起来。

JDOM是用Java语言读、写、操作XML的新API函数。在直接、简单和高效的前提下,这些API函数被最大限度的优化。

3.1、JDOM读取XML:

  1. <span style="background-color: rgb(255, 255, 255);">package com.jdom;
  2. import java.io.FileInputStream;
  3. import java.io.FileNotFoundException;
  4. import java.io.IOException;
  5. import java.io.InputStream;
  6. import java.io.InputStreamReader;
  7. import java.io.UnsupportedEncodingException;
  8. import java.util.List;
  9. import org.jdom2.Attribute;
  10. import org.jdom2.Document;
  11. import org.jdom2.Element;
  12. import org.jdom2.JDOMException;
  13. import org.jdom2.input.SAXBuilder;
  14. /**
  15. * JDOM Class Reader
  16. *
  17. */
  18. public class ReaderJDom {
  19. public static void main(String[] args) {
  20. try {
  21. //1.创建一个SAXBuilder的对象
  22. SAXBuilder saxBuilder = new SAXBuilder();
  23. //2.创建一个输入流,将xml文件加载到输入流中
  24. InputStream in = new FileInputStream("Book.xml");
  25. InputStreamReader isr = new InputStreamReader(in, "UTF-8");
  26. //3.通过saxBuilder的build方法,将输入流加载到saxBuilder中
  27. Document document = saxBuilder.build(isr);
  28. //4.通过document对象获取xml文件的根节点
  29. Element rootElement = document.getRootElement();
  30. //5.获取根节点下的子节点的List集合
  31. List<Element> elementList = rootElement.getChildren();
  32. for (Element element : elementList) {
  33. // 解析文件的属性集合
  34. List<Attribute> list = element.getAttributes();
  35. for (Attribute attr : list) {
  36. // 获取属性名
  37. String attrName = attr.getName();
  38. // 获取属性值
  39. String attrValue = attr.getValue();
  40. System.out.println(attrName +"="+ attrValue);
  41. // 对book节点的子节点的节点名以及节点值的遍历
  42. List<Element> listChild = element.getChildren();
  43. for (Element child : listChild) {
  44. System.out.println(child.getName() +"="+child.getValue());
  45. }
  46. }
  47. System.out.println("——————————————————————");
  48. }
  49. }catch (FileNotFoundException e) {
  50. e.printStackTrace();
  51. }catch (UnsupportedEncodingException e) {
  52. e.printStackTrace();
  53. }catch (JDOMException e) {
  54. e.printStackTrace();
  55. } catch (IOException e) {
  56. e.printStackTrace();
  57. }
  58. }
  59. }
  60. </span>

3.2、JDOM创建xml:

  1. <span style="background-color: rgb(255, 255, 255);">package com.jdom;
  2. import java.io.File;
  3. import java.io.FileNotFoundException;
  4. import java.io.FileOutputStream;
  5. import java.io.IOException;
  6. import org.jdom2.Document;
  7. import org.jdom2.Element;
  8. import org.jdom2.output.Format;
  9. import org.jdom2.output.XMLOutputter;
  10. /**
  11. * Create Class
  12. *
  13. */
  14. public class CreateJDom {
  15. public static void main(String[] args) {
  16. //1.生成一个根节点
  17. Element rss = new Element("Languages");
  18. //2.为节点添加属性
  19. rss.setAttribute("Cat","it");
  20. //3.生成一个document对象
  21. Document document = new Document(rss);
  22. //添加元素
  23. Element lan = new Element("lan");
  24. lan.setAttribute("id","1");
  25. Element name = new Element("name");
  26. name.setText("java");
  27. lan.addContent(name);
  28. Element IDE = new Element("IDE");
  29. IDE.setText("eclipse");
  30. lan.addContent(IDE);
  31. rss.addContent(lan);
  32. //添加元素
  33. Element lan2 = new Element("lan");
  34. lan2.setAttribute("id","1");
  35. Element name2 = new Element("name");
  36. name2.setText("C#");
  37. lan.addContent(name2);
  38. Element IDE2 = new Element("IDE");
  39. IDE2.setText("Visual Studio");
  40. lan2.addContent(IDE2);
  41. rss.addContent(lan2);
  42. //格式   换行、编码
  43. Format format = Format.getCompactFormat();
  44. format.setIndent("");
  45. format.setEncoding("GBK");
  46. //4.创建XMLOutputter的对象
  47. XMLOutputter outputer = new XMLOutputter(format);
  48. try {
  49. //5.利用outputer将document对象转换成xml文档
  50. outputer.output(document, new FileOutputStream(new File("Booknews.xml")));
  51. } catch (FileNotFoundException e) {
  52. e.printStackTrace();
  53. } catch (IOException e) {
  54. e.printStackTrace();
  55. }
  56. }
  57. }
  58. </span>

第四种:SAX的全称是Simple APIs for XML,也即XML简单应用程序接口。与DOM不同,SAX提供的访问模式是一种顺序模式,这是一种快速读写XML数据的方式。当使用SAX分析器对XML文档进行分析时,会触发一系列事件,并激活相应的事件处理函数,应用程序通过这些事件处理函数实现对XML文档的访问,因而SAX接口也被称作事件驱动接口。

Java四种读取和创建XML文档的例子教程的更多相关文章

  1. 四种生成和解析XML文档的方法详解(介绍+优缺点比较+示例)

    众所周知,现在解析XML的方法越来越多,但主流的方法也就四种,即:DOM.SAX.JDOM和DOM4J 下面首先给出这四种方法的jar包下载地址 DOM:在现在的Java JDK里都自带了,在xml- ...

  2. 四种生成和解析XML文档的方法详解

    众所周知,现在解析XML的方法越来越多,但主流的方法也就四种,即:DOM.SAX.JDOM和DOM4J 下面首先给出这四种方法的jar包下载地址 DOM:在现在的Java JDK里都自带了,在xml- ...

  3. 大杂烩 -- 四种生成和解析XML文档的方法详解

    基础大杂烩 -- 目录 众所周知,现在解析XML的方法越来越多,但主流的方法也就四种,即:DOM.SAX.JDOM和DOM4J DOM:在现在的Java JDK里都自带了,在xml-apis.jar包 ...

  4. 四种生成和解析XML文档的方法介绍

    解析XML的方法越来越多,但主流的方法也就四种,即:DOM.SAX.JDOM和DOM4J 1.DOM(Document Object Model) DOM是用与平台和语言无关的方式表示XML文档的官方 ...

  5. 使用LINQ TO XML 创建xml文档,以及读取xml文档把内容显示到GridView例子

    首先,准备了一个Model类 using System; using System.Collections.Generic; using System.Linq; using System.Text; ...

  6. C# 创建XML文档

    有些时候我们需要生成一个xml文档作为数据交换的容器.当然我们用拼接字符串的方法来进行构建xml,但是这种方法虽然简单有效,但是如果xml文档结构过于复杂,拼接字符串会让人眼花缭乱.这时候就需要C#给 ...

  7. 使用Dom4j创建xml文档

    我们学习dom4j为的就是使用它来创建XML文档.读取文档等更为方便,下面通过一个实例来展示如何通过dom4j去创建XML文档.展示怎样通过两种方式去创建元素,可以直接通过addElement方法返回 ...

  8. 字符串创建XML文档

    创建XML文档,方法与形式是多样的,下面Insus.NET再例举两种,可供参考. XmlDocument(namespace:System.Xml)在实例化之后,它有一个方法LoadXml(),可以把 ...

  9. PHP中利用DOM创建xml文档

    DOM创建xml文档 用dom创建如下文档: <booklist> <book id="1"> <title>天龙八部</title> ...

随机推荐

  1. pyhton数据类型:字典、集合、列表、元组

    基本常识 元组 列表 字典 集合 初始化 tuple=(1,2,3,4) list=[1,2,3,4] dic={'a':12,'b':34} set={1,2,3,4} 元素索引 tuple[0] ...

  2. CF1051D Bicolorings

    题目描述 咳咳,懒得复制了上面是两张图:) 解题思路 这题是一道很好的题,感觉之前做过,一开始手推状态找规律,可以用状压但是没想到 借鉴了一下大佬的dp modify数组用以累加新增的状态数 dp数组 ...

  3. Oracle 11g 总结篇2

    第一部分: 字段名的别名用""括起来,如:last_name as "姓名". 去除重复:在投影的字段名前加上 distinct 就可以了. 比如:select ...

  4. 【C#】上机实验七

    .开发一个窗体应用程序,窗体上能接收华氏温度或者摄氏温度,点击相应按钮可以相互转换. 要求转换后的华氏温度或者摄氏温度保留小数点后3位,程序中要有异常处理结构. using System; using ...

  5. Linux中etc目录详解大全总汇详解

    /etc etc不是什么缩写,是and so on的意思 来源于 法语的 et cetera 翻译成中文就是 等等 的意思. 至于为什么在/etc下面存放配置文件, 按照原始的UNIX的说法(Linu ...

  6. 并发编程之Disruptor并发框架

    一.什么是Disruptor Martin Fowler在自己网站上写了一篇LMAX架构的文章,在文章中他介绍了LMAX是一种新型零售金融交易平台,它能够以很低的延迟产生大量交易.这个系统是建立在JV ...

  7. CSS两列布局

    方法1:左边设置绝对定位,右边设置左外边距,大小和左边的宽度相等 //CSS部分: .contain{ position :relative; height: 300px; } .left{ posi ...

  8. SpringBoot学习之@Configuration注解和@Bean注解

    @Configuration 1.@Configuration注解底层是含有@Component ,所以@Configuration 具有和 @Component 的作用. 2.@Configurat ...

  9. Python——2x和3x的区别汇总

    1. 初始解释器编码: 2x:ascii 编码(不自持中文) 3x:unicode编码 推荐全部更换为utf-8 2. 输出方式不同 2x:print ‘你好’2.7版本的两种都支持 3x:print ...

  10. mybatis的XML中注释需谨慎

    报错内容: java.sql.SQLException: Parameter index out of range (3 > number of parameters, which is 2) ...