JDOM入门实例:读取与创建xml文档

简介:

1.入门实例一:xml文件的读取与修改

xml文件:library.xml

复制代码
<?xml version="1.0" encoding="UTF-8"?>
<books>
<book email="abc@163.com">
<name>jdom</name>
<price>60.0</price>
</book>
</books>
复制代码

代码实例:JDomParse.java

复制代码
package edu.sjtu.erplab.jdom;

import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;

//下面是引用到JDOM中的类
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
import org.jdom.output.XMLOutputter;

public class JDomParse {
public JDomParse() {
//定义xml文件路径
String xmlpath = "D:\\Documents\\workspace\\JAVAStudy\\src\\edu\\sjtu\\erplab\\jdom\\library.xml";
SAXBuilder builder = new SAXBuilder(false);
try {
Document doc = builder.build(xmlpath);
// 得到根元素
Element books = doc.getRootElement();
// 得到“books”元素的所在名称为“book”的元素,并把这些元素都放到一个List集合中
List booklist = books.getChildren("book");
/**
* 轮循List集合,方法1:
*/
for (Iterator iter = booklist.iterator(); iter.hasNext();) {
Element book = (Element) iter.next();
String email = book.getAttributeValue("email");// 获取email元素的值
System.out.println(email);
String name = book.getChildTextTrim("name");
System.out.println(name);
// 修改name元素的值,注意的是,必须确定book元素的名为“name”的子元素只有一个。
book.getChild("name").setText("edit-jdom");
}

/**
* 轮循List集合,方法2:
*/
// for (int i = 0; i < booklist.size(); i++) {
// Element book = (Element) booklist.get(i);
// String email = book.getAttributeValue("email");// 获取email元素的值
// System.out.println(email);
// String name = book.getChildTextTrim("name");
// System.out.println(name);
//// 修改name元素的值,注意的是,必须确定book元素的名为“name”的子元素只有一个。
// book.getChild("name").setText("edit-jdom");
// }

// 使用XMLOutputter类,把已经修改了的Document保存进XML文档中。
XMLOutputter outputter = new XMLOutputter();
outputter.output(doc, new FileOutputStream(xmlpath));
} catch (JDOMException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}

public static void main(String[] args) {
new JDomParse();
}
}
复制代码

输出结果:

abc@163.com
jdom

这个时候在去查看library.xml会发现它已经变为:

复制代码
<?xml version="1.0" encoding="UTF-8"?>
<books>
<book email="abc@163.com">
<name>edit-jdom</name>
<price>60.0</price>
</book>
</books>
复制代码

2.入门实例二:XML文件的创建与读取

代码实例:JdomRWXML.java

复制代码
package edu.sjtu.erplab.jdom;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;

import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
import org.jdom.output.XMLOutputter;

public class JdomRWXML {

/**
* 创建xml文档
*
@throws IOException
*
@throws JDOMException
*/
public void BuildXMLDoc() throws IOException, JDOMException {
// 创建根节点 list;
Element root = new Element("list");
// 将根节点添加到文档中;
Document Doc = new Document(root);
// 此处 for 循环可替换成 遍历 数据库表的结果集操作;
for (int i = 0; i < 5; i++) {
// 创建新节点 company;
Element elements = new Element("company");
// 给 company 节点添加属性 id;
elements.setAttribute("id", "" + i);
// 给 company 节点添加子节点并赋值
elements.addContent(new Element("company_name").setText("name" + i));
elements.addContent(new Element("company_email").setText("name" + i + "@163.com"));
// 给父节点list添加company子节点;
root.addContent(elements);
}
XMLOutputter XMLOut = new XMLOutputter();
// 输出company_list.xml文件;
XMLOut.output(Doc, new FileOutputStream("company_list.xml"));
}

/**
* 读取xml文档
*
@throws IOException
*
@throws JDOMException
*/
public void ReadXMLDoc() throws IOException, JDOMException {
SAXBuilder sb = new SAXBuilder();// 建立构造器
Document doc = sb.build(new FileInputStream("company_list.xml"));// 读入指定文件
Element root = doc.getRootElement();// 获得根节点
List<?> list = root.getChildren();// 将根节点下的所有子节点放入List中
for (int i = 0; i < list.size(); i++) {
System.out.println("---------------------------");
Element item = (Element) list.get(i);// 取得节点实例
String id = item.getAttribute("id").getValue();// 取得属性值
System.out.println("id-->" + id);

Element sub1 = item.getChild("company_name");// 取得当前节点的字节点
String company_name = sub1.getText();// 取得当前节点的值
System.out.println("company_name-->" + company_name);

Element sub2 = item.getChild("company_email");
String company_email = sub2.getText();
System.out.println("company_email-->" + company_email);
}
}

/**
*
@param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
JdomRWXML jdomRWXML = new JdomRWXML();

System.out.println("--------BuildXMLDoc----------");
jdomRWXML.BuildXMLDoc();

System.out.println("--------ReadXMLDoc----------");
jdomRWXML.ReadXMLDoc();

} catch (Exception e) {
e.printStackTrace();
}
}

}
复制代码

输出结果:

复制代码
--------BuildXMLDoc----------
--------ReadXMLDoc----------
---------------------------
id-->0
company_name-->name0
company_email-->name0@163.com
---------------------------
id-->1
company_name-->name1
company_email-->name1@163.com
---------------------------
id-->2
company_name-->name2
company_email-->name2@163.com
---------------------------
id-->3
company_name-->name3
company_email-->name3@163.com
---------------------------
id-->4
company_name-->name4
company_email-->name4@163.com
复制代码

然后我们在项目根目录下会发现多了一个company_list.xml文件,内容如下:

复制代码
<?xml version="1.0" encoding="UTF-8"?>
<list>
<company id="0">
<company_name>name0</company_name>
<company_email>name0@163.com</company_email>
</company>
<company id="1">
<company_name>name1</company_name>
<company_email>name1@163.com</company_email>
</company>
<company id="2">
<company_name>name2</company_name>
<company_email>name2@163.com</company_email>
</company>
<company id="3">
<company_name>name3</company_name>
<company_email>name3@163.com</company_email>
</company>
<company id="4">
<company_name>name4</company_name>
<company_email>name4@163.com</company_email>
</company>
</list>
复制代码


本文转自xwdreamer博客园博客,原文链接:http://www.cnblogs.com/xwdreamer/archive/2012/02/21/2361820.html,如需转载请自行联系原作者

目录
相关文章
|
XML 数据采集 存储
使用Java和XPath在XML文档中精准定位数据
在数据驱动的时代,从复杂结构中精确提取信息至关重要。XML被广泛用于数据存储与传输,而XPath则能高效地在这些文档中导航和提取数据。本文深入探讨如何使用Java和XPath精准定位XML文档中的数据,并通过小红书的实际案例进行分析。首先介绍了XML及其挑战,接着阐述了XPath的优势。然后,提出从大型XML文档中自动提取特定产品信息的需求,并通过代理IP技术、设置Cookie和User-Agent以及多线程技术来解决实际网络环境下的数据抓取问题。最后,提供了一个Java示例代码,演示如何集成这些技术以高效地从XML源中抓取数据。
374 7
使用Java和XPath在XML文档中精准定位数据
|
XML Java 数据格式
Spring5入门到实战------7、IOC容器-Bean管理XML方式(外部属性文件)
这篇文章是Spring5框架的实战教程,主要介绍了如何在Spring的IOC容器中通过XML配置方式使用外部属性文件来管理Bean,特别是数据库连接池的配置。文章详细讲解了创建属性文件、引入属性文件到Spring配置、以及如何使用属性占位符来引用属性文件中的值。
Spring5入门到实战------7、IOC容器-Bean管理XML方式(外部属性文件)
|
XML Java 数据库连接
MyBatis入门——MyBatis XML配置文件(3)
MyBatis入门——MyBatis XML配置文件(3)
569 6
|
11月前
|
XML 前端开发 Java
XML基本概念入门学习指南
XML(eXtensible Markup Language)是一种可扩展的标记语言,和HTML语言语法类似,同属于标记语言。
366 14
|
XML Java 数据格式
Spring5入门到实战------11、使用XML方式实现AOP切面编程。具体代码+讲解
这篇文章是Spring5框架的AOP切面编程教程,通过XML配置方式,详细讲解了如何创建被增强类和增强类,如何在Spring配置文件中定义切入点和切面,以及如何将增强逻辑应用到具体方法上。文章通过具体的代码示例和测试结果,展示了使用XML配置实现AOP的过程,并强调了虽然注解开发更为便捷,但掌握XML配置也是非常重要的。
Spring5入门到实战------11、使用XML方式实现AOP切面编程。具体代码+讲解
|
XML Java 数据格式
Spring5入门到实战------6、IOC容器-Bean管理XML方式(自动装配)
这篇文章是Spring5框架的入门教程,详细讲解了IOC容器中Bean的自动装配机制,包括手动装配、`byName`和`byType`两种自动装配方式,并通过XML配置文件和Java代码示例展示了如何在Spring中实现自动装配。
Spring5入门到实战------6、IOC容器-Bean管理XML方式(自动装配)
|
XML Java 数据库
Spring5入门到实战------15、事务操作---概念--场景---声明式事务管理---事务参数--注解方式---xml方式
这篇文章是Spring5框架的实战教程,详细介绍了事务的概念、ACID特性、事务操作的场景,并通过实际的银行转账示例,演示了Spring框架中声明式事务管理的实现,包括使用注解和XML配置两种方式,以及如何配置事务参数来控制事务的行为。
Spring5入门到实战------15、事务操作---概念--场景---声明式事务管理---事务参数--注解方式---xml方式
|
XML 移动开发 前端开发
基于若依的ruoyi-nbcio流程管理系统里修正仿钉钉流程部门主管与多实例转xml的bug
基于若依的ruoyi-nbcio流程管理系统里修正仿钉钉流程部门主管与多实例转xml的bug
137 1
|
XML Java Maven
Spring中AOP最简单实例-XML形式
Spring中AOP最简单实例-XML形式
70 0
|
XML 存储 C#
C# xml文档反序列化记事
本文介绍了使用XmlSerializer进行XML序列化和反序列化的关键点。包括:1) 以独占方式读取XML文件以避免并发问题;2) 当元素名与类型名不一致时,可通过`[XmlArrayItem]`指定元素名,或创建继承自原始类型的子类;3) 处理DateTime反序列化错误,通过中间字符串属性转换;4) 提到了常用C#特性如`[XmlRoot]`, `[XmlElement]`, `[XmlAttribute]`, `[XmlIgnore]`和`[XmlArrayItem]`的作用。
163 0