四种方法解析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. [转]NGINX-检测客户端是通过电脑还是移动设备访问的,将请求重定向到适配的WEB站点

    原文地址:https://blog.51cto.com/10978134/2163757 检测客户端是通过电脑还是移动设备访问的,将请求重定向到适配的WEB站点 此配置方法由Detect Mobile ...

  2. LeetCode 84. 柱状图中最大的矩形(Largest Rectangle in Histogram)

    84. 柱状图中最大的矩形 84. Largest Rectangle in Histogram

  3. LeetCode 445. 两数相加 II(Add Two Numbers II)

    445. 两数相加 II 445. Add Two Numbers II 题目描述 给定两个非空链表来代表两个非负整数.数字最高位位于链表开始位置.它们的每个节点只存储单个数字.将这两数相加会返回一个 ...

  4. Windows 下升级 node & npm 到最新版本

    查询 Node 的安装目录where node 升级 Node:在官网下载最新的安装包,直接安装即可.https://nodejs.org/ 升级 npmnpm install -g npm 使用 n ...

  5. nginx 简单介绍

    Nginx同Apache一样都是一种WEB服务器.基于REST架构风格,以统一资源描述符(Uniform Resources Identifier)URI或者统一资源定位符(Uniform Resou ...

  6. Java线程synchronized(一)

    线程安全概念:当多个线程访问某一个类(对象或方法)时,这个对象始终都能表现出正确的行为,那么这个类(对象或方法)就是线程安全的. synchronized:可以在任意对象及方法上加锁,而加锁的这段代码 ...

  7. C#代码常用技巧

    1.拼sql语句时,list中元素加单引号并以逗号分开:string.Join(",",list.Select(r=>"'"+r+"'" ...

  8. C# vb .net实现移除透明度效果

    在.net中,如何简单快捷地实现Photoshop滤镜组中的移除透明度效果呢?答案是调用SharpImage!专业图像特效滤镜和合成类库.下面开始演示关键代码,您也可以在文末下载全部源码: 设置授权 ...

  9. TFTP(Trivial File Transfer Protocol,简单文件传输协议)

    TFTP(Trivial File Transfer Protocol,简单文件传输协议),是 TCP/IP 协议族中用来在客户机和服务器之间进行简单文件传输的协议,开销很小.这时候有人可能会纳闷,既 ...

  10. jQuery动画(带参数)

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...