四种方法解析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. CF13C Sequence(DP+离散化)

    题目描述 给定一个序列,每次操作可以把某个数+1-1.要求把序列变成非降数列.求最少的修改次数. 输入输出样例 输入 #1 - 输出 #1 4 输入 #2 输出 #2 1 解题思路 这题是一道非常好题 ...

  2. MongoDB初始化创建管理员账户登录

    1.查看mongodb服务是否开启: ps -ef | grep mongod 2.管理员角色必须在启用--auth认证参数之前创建,否则会没有操作权限.如果之前已经创建过用户,请先删除. kill掉 ...

  3. R学习笔记1 介绍R的使用

    R脚本的一次执行叫做一个会话(Session),可以通过函数quit()退出当前的会话 quit(save = "default", status = 0, runLast = T ...

  4. 单实例dg软件从10.2.0.4版本安装至10.2.0.5.12

    DG环境搭建需求,因此安装与主库相同的软件版本 1.主库软件版本10.2.0.5.12 2dg环境提供的是全新的10.2.0.4.0 3.安装步骤,安装10.2.0.5 静默安装 psu安装10.2. ...

  5. 聊一聊,React开发中应该规避的点

    原文永久链接: https://github.com/AttemptWeb..... 下面说到的React开发中注意的问题,部分是自己遇到过的点,部分是收集的,也算是React代码优化部分,这次做一个 ...

  6. linux route详细解读

    route命令用于显示和操作IP路由表.要实现两个不同的子网之间的通信,需要一台连接两个网络的路由器,或者同时位于两个网络的网关来实现.在Linux系统中,设置路由通常是 为了解决以下问题:该Linu ...

  7. power shell命令添加SharePoint用户组与用户(用户为域用户)

    查看SharePoint用户组 Get-PnPGroup 查看某一用户组 Get-PnPGroup -Identity "用户组名" 查看某一用户组下的所有成员 Get-PnPGr ...

  8. "超时时间已到。在操作完成之前超时"的解决思路

    错误往往是数据库操作超时引起 1.检查数据库访问连接字符串启用连接池,若是,适当增大超时时间 2.ADO sqlcommand相应调整超时时长 3.关键在于优化数据库操作,优化压缩执行时间

  9. 【转载】C#中string类使用Replace方法来替换字符串

    在C#的字符串操作过程中,有时候需要替换字符串中的某个子字符串,此时就可以使用到字符串类自带的Replace方法来实现,Replace方法将查找到所有符合被替换的子字符串,然后将之全部替换为目标字符串 ...

  10. JavaScript之运算符

    (1)赋值运算符 // c+=1; // 相当于c=c+1; // console.log(a++); // 先将a的值赋值给表达式,a再加1 // console.log(++a); // a先加1 ...