核心提示:XML 是数据领域的 Java 语言,它使数据独立于创建它的软件和该软件所在的操作系统,就像 Java 使软件独立于操作系统一样。 Jdom makes xml easy , said by jason hunter. Jdom 是用 Java 语言读、写、操作 XML 的新 API 函数。 Jdom 是基于树操作的纯 Java

XML是数据领域的Java语言,它使数据独立于创建它的软件和该软件所在的操作系统,就像Java使软件独立于操作系统一样。

“Jdom makes xml easy”, said by jason hunter.

Jdom是用Java语言读、写、操作XML的新API函数。Jdom是基于树操作的纯Java API,是一套用于解析、创建和实现xml的解决方案。

下载JDOM包:

官网地址:http://www.jdom.org

下载地址(直接在迅雷里新建任务即可):http://www.jdom.org/dist/binary/jdom-1.1.1.zip

配置环境变量:将JDOM目录下的build下的jdom.jar文件,拷贝到JAVA2SKD目录下的jre/lib/ext目录下;使用eclipse时,可手动添加到user liberary。

基本思路:用JDOM读取XML文件,需先用org.jdom.input.SAXBuilder对象的build()方法创建Document对象,然后用Document类(org.jdom.Document)、Element类(org.jdom.Element)等方法读取所需的内容。(后详)

示例:创建一个硬盘上分区磁盘的信息XML文件;读取其中信息,输出到控制台。

基本步骤:

//generateSample.java创建XML

//ReadSample.java 读取XML中信息

一、JDOM创建XML

  1. //GenerateSample.java
  2. package xml;
  3. import java.io.FileOutputStream;
  4. import java.io.IOException;
  5. import org.jdom.Document;
  6. import org.jdom.Element;
  7. import org.jdom.JDOMException;
  8. import org.jdom.output.Format;
  9. import org.jdom.output.XMLOutputter;
  10. public class GenerateSample
  11. {
  12. //创建XML
  13. public void BuildXMLDoc() throws IOException, JDOMException
  14. {
  15. // 创建根节点 root;
  16. Element root = new Element("HD");
  17. // 根节点添加到文档中;
  18. Document Doc = new Document(root);
  19. // 此处 for 循环可替换成 遍历 数据库表的结果集操作;
  20. // 创建节点 DISK1;
  21. Element elementsC = new Element("disk");
  22. // 给DISK1 节点添加属性 id;
  23. elementsC.setAttribute("name", "C");
  24. // 给DISK1节点添加子节点并赋值;
  25. elementsC.addContent(new Element("capacity").setText("8G"));
  26. elementsC.addContent(new Element("directories").setText("200"));
  27. elementsC.addContent(new Element("files").setText("5000"));
  28. // 给父节点disk添加disk子节点;
  29. root.addContent(elementsC);
  30. Element elementsD = new Element("disk");
  31. // 给DISK1 节点添加属性 id;
  32. elementsD.setAttribute("name", "D");
  33. // 给DISK1节点添加子节点并赋值;
  34. elementsD.addContent(new Element("capacity").setText("20G"));
  35. elementsD.addContent(new Element("directories").setText("400"));
  36. elementsD.addContent(new Element("files").setText("1520"));
  37. // 给父节点disk添加disk子节点;
  38. root.addContent(elementsD);
  39. Element elementsE = new Element("disk");
  40. // 给DISK1 节点添加属性 id;
  41. elementsE.setAttribute("name", "E");
  42. // 给DISK1节点添加子节点并赋值;
  43. elementsE.addContent(new Element("capacity").setText("20G"));
  44. elementsE.addContent(new Element("directories").setText("500"));
  45. elementsE.addContent(new Element("files").setText("10200"));
  46. // 给父节点disk添加disk子节点;
  47. root.addContent(elementsE);
  48. Element elementsF = new Element("disk");
  49. // 给DISK1 节点添加属性 id;
  50. elementsF.setAttribute("name", "F");
  51. // 给DISK1节点添加子节点并赋值;
  52. elementsF.addContent(new Element("capacity").setText("30G"));
  53. elementsF.addContent(new Element("directories").setText("700"));
  54. elementsF.addContent(new Element("files").setText("30000"));
  55. // 给父节点disk添加disk子节点;
  56. root.addContent(elementsF);
  57. //定义输出
  58. XMLOutputter XMLOut = new XMLOutputter();
  59. //设置格式
  60. Format format = Format.getPrettyFormat();
  61. format.setEncoding("UTF-8"); //设置xml文件的字符为UTF-8
  62. format.setIndent(" "); //设置xml文件的缩进为4个空格
  63. XMLOut.setFormat(format);
  64. // 输出 user.xml 文件;
  65. XMLOut.output(Doc, new FileOutputStream("F:/sample.xml"));
  66. }
  67. public static void main(String[] args)
  68. {
  69. try
  70. {
  71. GenerateSample j2x = new GenerateSample();
  72. j2x.BuildXMLDoc(); //创建
  73. System.out.println("Sample.xml has already generated successfully!");
  74. }
  75. catch (Exception e)
  76. {
  77. e.printStackTrace();
  78. }
  79. }
  80. }

结果:

①     产生F:/sample.xml文件

②     控制台输出结果:

Sample.xml has already generated successfully!

Sample.xml文件中内容:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <HD>
  3. <disk name="C">
  4. <capacity>8G</capacity>
  5. <directories>200</directories>
  6. <files>5000</files>
  7. </disk>
  8. <disk name="D">
  9. <capacity>20G</capacity>
  10. <directories>400</directories>
  11. <files>1520</files>
  12. </disk>
  13. <disk name="E">
  14. <capacity>20G</capacity>
  15. <directories>500</directories>
  16. <files>10200</files>
  17. </disk>
  18. <disk name="F">
  19. <capacity>30G</capacity>
  20. <directories>700</directories>
  21. <files>30000</files>
  22. </disk>
  23. </HD>

二、

//ReadSapmle.java

  1. package xml;
  2. import java.util.List;
  3. import org.jdom.Document;
  4. import org.jdom.Element;
  5. import org.jdom.input.SAXBuilder;
  6. public class ReadSample
  7. {
  8. public static void main(String[] args) throws Exception
  9. {
  10. SAXBuilder sb=new SAXBuilder();
  11. Document doc=sb.build("F:/sample.xml");//构造文档对象
  12. Element root=doc.getRootElement();//获得根元素
  13. List list=root.getChildren("disk");//取标记为disk的所有元素
  14. for(int i=0;i<list.size();i++)
  15. {
  16. Element element=(Element)list.get(i);
  17. String name=element.getAttributeValue("name");
  18. String capacity=element.getChildText("capacity");
  19. String directories=element.getChildText("directories");
  20. String files=element.getChildText("files");
  21. System.out.println("磁盘信息:");
  22. System.out.println("分区盘符:"+name);
  23. System.out.println("分区容量:"+capacity);
  24. System.out.println("目录数:"+directories);
  25. System.out.println("文件数:"+files);
  26. System.out.println("---------------------");
  27. }
  28. }
  29. }

控制台输出结果:

磁盘信息:

分区盘符:C

分区容量:8G

目录数:200

文件数:5000

---------------------

磁盘信息:

分区盘符:D

分区容量:20G

目录数:400

文件数:1520

---------------------

磁盘信息:

分区盘符:E

分区容量:20G

目录数:500

文件数:10200

---------------------

磁盘信息:

分区盘符:F

分区容量:30G

目录数:700

文件数:30000

---------------------

其他方案对比:

使用XML来表示数据的最大优点之一是,总能将数据取回,如果决定将数据移到关系型数据库、MySQL数据库或其他数据源中,可以很容易地取回这些信息。

①     JAXP(Java API for XML Processing):包括3个软件包org.w3c.dom、org.xml.sax、javax.xml.parsers。使用Java API来读取XML文件中的数据;而使用Java来写入XML数据时,不需要这种API,只需将字符串写入到文件、输出流或者其他介质中,就可以创建XML文件。(复杂,I’m failed in this method!)

②     JDOM,是一种用于与Java对象(而不是XML分析方法)一起来读写和操纵XML的开放源代码库。

③     XOM,开放源代码库,创建它旨在弥补JDOM中明显的缺陷。

基本思路:用JDOM读取XML文件,需先用org.jdom.input.SAXBuilder对象的build()方法创建Document对象,然后用Document类(org.jdom.Document)、Element类(org.jdom.Element)等方法读取所需的内容。

Jdom模型:

每个元素都有四个关键段:名称、元素属性、元素范围名字空间、元素内容

用JDOM处理现有XML文档的大致过程如下:

(1)用简单无变元构造函数构造一个org.jdom.input.SAXBuilder对象。SAXBuilder用sax解析器从文件中构造文档。SAXBuilder侦听sax事件并从内存中建立一个相应的文档。

(2)用SAXBuiler的build()方法从Reader,InputStream,URL,File或包含系统ID的字符串建立Document对象。

(3)如果读取文档遇到问题,则抛出IOException,如果建立文档遇到问题,则抛出JDOMException。

(4)否则用Document类,Element类和其他JDOM类的方法在文档中建立导航。

导航JDOM树

每个Element对象包含一列子元素:Comment,ProcessingInstruction,Text和其他Element对象。此外,属性和其他名字空间还有单独的列表。

分析文档和建立Document对象之后,可能要通过搜索来选择其中程序感兴趣的部分。在JDOM中,大多数导航通过Element类的方法进行。

每个Element的完整子元素(包括了子元素的所有内容,包括说明、处理指令、文本节点和元素,要进行深度搜索,就要对当前元素的子元素应用getContent()方法,通常要采用递归)在getContent()方法返回java.util.List中提供。getChildren()方法返回的java.util.List中只有每个Element的子元素。

JDOM的处理主要是用SAX实现的, JDOM中几乎没有接口,全部是实实在在的类,没有类工厂类的。其最重要的一个包org.jdom中主要有以下类:

Document(文档节点)每个Document对象包括下列三个属性:根Element;表示文档类型声明的DocType对象;包含根元素和任何处理指令与说明的List,按文档顺序出现。

Attribute(属性节点)

Public Element setAttributes (List attributes)Throws IllegalAddException; Public List getAttributes() ;

setAttribute();getAttribute();getAttributeValue();

attribute.getName() ;attribute.getValue()

CDATA (CDATA段节点):
Comment(
说明节点) ,即XML文件的说明:<!-- wire configuration -->

DocType (文档类型节点)
Element(
元素节点) 元素名设置和获取:

Public Element setName(String name) throws IllegalNameException;Public String getName();

Public String  get(int i)  //i>=0
Content(内容节点)

Public Element setContent(List list) throws IllegalAddException;
public List getContent();  addContent();   removeContent();

EntityRef(实例节点)

Namespace(名字空间节点)

ProcessingInstruction(处理指令节点)

Text(文本节点)getText();setText(String s);

JDOM读取XML数据

看过此文的读者还看过:
JDOM读写XML数据
本文内容搜集于互联网,如有侵犯你的权利,请来信告知。
上一篇:JavaScript实现Json到XML的转换
下一篇:JAVA操作Excel文件

Jdom makes xml easy相关推荐

  1. jdom解析xml文件_JDOM编辑XML文件示例

    jdom解析xml文件 JDOM provides very neat way to manipulate XML files, using JDOM is very easy and the cod ...

  2. java xml中的冒号_Java jdom解析xml文件带冒号的属性

    Java jdom解析xml文件带冒号的属性 如果xml文件解析带了冒号的属性,一般都是要特别处理,这里是命名空间,N年前遇到过一次忘记记录,后来也忘了,这次再记录下. 解决了,记录下,分享给大家,百 ...

  3. 使用JDOM解析XML

    最近的工作常常要和XML格式的文档或字符串打交道,发现用JDOM来做真是方便.可以实现XML应用程序的快速开发. 在 JDOM 中,XML元素就是 Element 的实例,XML属性就是 Attrib ...

  4. 简单使用JDOM解析XML

    简单使用JDOM解析XML 博客分类: xml XMLJava编程ASPVB 使用JDOM解析XML 一.前言     JDOM是Breet Mclaughlin和Jason Hunter两大Java ...

  5. JDom,jdom解析xml文件

    1.要解析的文件模板如下: <?xml version="1.0" encoding="GBK"?> <crsc> <data&g ...

  6. Javaweb学习笔记——使用Jdom解析xml

    一.前言 Jdom是什么? Jdom是一个开源项目,基于树形结构,利用纯java的技术对XML文档实现解析,生成,序列化以及多种操作.它是直接为java编程服务,利用java语言的特性(方法重载,集合 ...

  7. java jdom解析xml文件_Java 使用JDOM解析XML文档

    使用JDOM解析XML文档 JDOM是一种使用 XML(标准通用标记语言下的一个子集) 的独特 Java 工具包.下面我们来看一下怎么使用 JDOM来解析XML文档. 首先下载JDOM的jar包,并导 ...

  8. java jdom 读取xml文件_使用Jdom读取XML文件方法

    使用Jdom读取XML文件方法,学习Spring时,我们经常看到很多xml配置文件,Spring通过在配置文件中的配置,使用IOC(控制反转),从而实现代码的灵活性,本篇我就为大家介绍一种解析xml方 ...

  9. java jdom_java使用Jdom实现xml文件写入操作实例

    本文实例讲述了java使用Jdom实现xml文件写入操作的方法.分享给大家供大家参考,具体如下: package com.yanek.demo.xml.test; import java.io.Fil ...

最新文章

  1. linux 时钟同步 chrony 简介
  2. 文件结束[置顶] javaweb框架--自定义标签与freemaker结合
  3. Kinect for windows的脸部识别
  4. vscode设置代码编辑时组合键代替方向键移动光标
  5. SPI 简介(备忘)
  6. fieldset 添加2个legend_第231号!增补乙基纤维素等2个饲添进入饲料添加剂品种目录(2013)...
  7. java java.lang_Java之java.lang.IllegalMonitorStateException
  8. java 远程调用url_使用Java的URL/HttpURLConnection进行远程调用(POST请求)
  9. Ionic3与Angular4新特性
  10. 为了拿Ph.D而做出的诺贝尔奖
  11. 计算机上wps表格乘除算法,excel乘法公式-WPS表格乘法运算大全
  12. micropython(esp8266)SG90舵机控制
  13. 非视线成像:基于飞秒摄影技术
  14. 《计算机网络:自顶向下方法》阅读笔记
  15. 本科挣 30 万,秋招大厂提前批offer,大学四年,帅地做对了什么?(附所有知识清单)
  16. 瑜伽的起源和种类划分
  17. 2012年1月当选微软MVP的CSDN会员名单揭晓!
  18. 117页智慧管廊数字管道建设整体技术方案
  19. 用于《机械设计课程设计》中的减速箱设计的Python计算程序
  20. 统计报表指的是什么?有什么专业的报表制作软件?

热门文章

  1. react滑动切换tab动画效果_Swiper - 免费开源、功能强大的触摸滑动js特效插件
  2. java override overwrite,重写(overwrite)、重载(overload)和覆盖(override)
  3. 教程:10、VI编辑器
  4. 怎么将jsp中var报错_招聘中不得将全日制作为限制性条件,怎么就不公平了?
  5. 示波器_你真的懂示波器嘛?面试中会用到的示波器知识
  6. c盘python27文件夹可以删除嘛_C盘的文件夹哪些可以删除
  7. 计算机三年工作经验和研究生,三年工作经验和读三年研究生到底哪个更值?这个回答很权威...
  8. 清华大学范玉顺互联网与大数据_清华大学范玉顺:大数据、人工智能与工业互联网...
  9. linux apache cpu,linux – Apache使用100%的CPU. “ps”命令可以告诉我它在做什么吗?...
  10. vb.net 功能f8键事件_Excel中F1~F12所有功能键作用,你知道吗?