java 处理XML(dom4j-1.6.1)


Java 处理xml有很多框架,今天使用主流框架dom4j-1.6.1

下载地址:http://www.dom4j.org/dom4j-1.6.1/

Dom4j,是一款开源的处理XML, XPath, and XSLT的框架,它容易使用,并且完全支持DOM, SAX, and JAXP.


写XML 文件

  • 首先创建一个XMLwriter,吧文件写到output.xml
 // lets write to a file
XMLWriter writer = new XMLWriter(
new FileWriter( "output.xml" )
);
  • 创建一个xml Document
Document document = DocumentHelper.createDocument();
  • 接着创建 元素的根节点
Element root = document.addElement( "root" );
  • 接下来在根节点添加元素和属性
 root.addElement( "author" )
.addAttribute( "name", "James" )
.addAttribute( "location", "UK" )
.addText( "James Strachan" );
  • 最后保存文件
     writer.write( document );
writer.close();
  • 这样保存效果很差,很不美观,如果想要漂亮的效果
OutputFormat format = OutputFormat.createPrettyPrint();
XMLWriter writer = new XMLWriter(new FileWriter("output.xml"), format);

最终的:

import java.io.FileWriter;
import java.io.IOException; import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter; public class XMLWriterTest {
/**
* @author Young
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
OutputFormat format = OutputFormat.createPrettyPrint();
XMLWriter writer = new XMLWriter(new FileWriter("output.xml"), format); Document document = DocumentHelper.createDocument();
Element root = document.addElement("root"); root.addComment("This is xml comment");
root.addElement("author").addAttribute("name", "James")
.addAttribute("location", "UK").addText("James Strachan");
writer.write(document);
writer.close();
}
}

输出效果如下:

<?xml version="1.0" encoding="UTF-8"?>

<root>
<!--This is xml comment-->
<author name="James" location="UK">James Strachan</author>
</root>

嵌套写XML

想要的效果如下:

<?xml version="1.0" encoding="UTF-8"?>

<StudentInfo Class="1">
<!--This is Class 1 student information-->
<student name="Jack" Sex="Male" Birthday="1988/07/05">100001
<scores score="90"/>
</student>
<student name="Lisa" Sex="Female" Birthday="1989/02/12">100002
<scores score="98"/>
</student>
<student name="Steven" Sex="Male" Birthday="1987/11/18">100003
<scores score="59"/>
</student>
<student name="Jenny" Sex="Female" Birthday="1989/03/18">100004
<scores score="69"/>
</student>
<student name="Lucy" Sex="Female" Birthday="1990/01/26">100005
<scores score="90"/>
</student>
<student name="Lewis" Sex="Male" Birthday="1989/04/06">100006
<scores score="82"/>
</student>
</StudentInfo>

每个student节点下设置一个score节点

并且所有student节点属性都一样,于是乎可以创建一个student bean专门用于数据传递:

/***
* This Class is for Student bean
* @author Young
*
*/
public class Student { private int stud_Id;
private String stud_Name;
private String sex;
private String birthday;
private String score; public int getStud_Id() {
return stud_Id;
} public void setStud_Id(int stud_Id) {
this.stud_Id = stud_Id;
} public String getStud_Name() {
return stud_Name;
} public void setStud_Name(String stud_Name) {
this.stud_Name = stud_Name;
} public String getSex() {
return sex;
} public void setSex(String sex) {
this.sex = sex;
} public String getBirthday() {
return birthday;
} public void setBirthday(String birthday) {
this.birthday = birthday;
} public String getScore() {
return score;
} public void setScore(String score) {
this.score = score;
} /**
* This method is a constructor
*
* @author Young
* @param id
* @param name
* @param sex
* @param birthday
* @param score
*/
public Student(int id, String name, String sex, String birthday,
String score) { this.stud_Id = id;
this.stud_Name = name;
this.sex = sex;
this.birthday = birthday;
this.score = score;
}
}

接下来初始化并放到一个ArrayList:

static List<Student> students = new ArrayList<Student>();

    /**
* @author Young
*/
public static void init() {
Student stu1 = new Student(100001, "Jack", "Male", "1988/07/05", "90");
Student stu2 = new Student(100002, "Lisa", "Female", "1989/02/12", "98");
Student stu3 = new Student(100003, "Steven", "Male", "1987/11/18", "59");
Student stu4 = new Student(100004, "Jenny", "Female", "1989/03/18",
"69");
Student stu5 = new Student(100005, "Lucy", "Female", "1990/01/26", "90");
Student stu6 = new Student(100006, "Lewis", "Male", "1989/04/06", "82");
students.add(stu1);
students.add(stu2);
students.add(stu3);
students.add(stu4);
students.add(stu5);
students.add(stu6); }

创建一个写到XML文件的方法:

/**
* @author Young
* @param studs
* @return
* @throws IOException
*/
public static Document createDocument(List<Student> studs)
throws IOException { OutputFormat format = OutputFormat.createPrettyPrint();
XMLWriter writer = new XMLWriter(new FileWriter("output.xml"), format); Document document = DocumentHelper.createDocument();
Element root = document.addElement("StudentInfo"); root.addAttribute("Class", "1");
root.addComment("This is Class 1 student information"); for (Student std : studs) {
root.addElement("student").addAttribute("name", std.getStud_Name())
.addAttribute("Sex", std.getSex())
.addAttribute("Birthday", std.getBirthday())
.addText(Integer.toString(std.getStud_Id()))
.addElement("scores").addAttribute("score", std.getScore());
}
writer.write(document);
writer.close();
return document;
}

读取XML文件

  • 与写文件相似,首先创建一个SAXReader
SAXReader reader = new SAXReader()
  • 接着创建XML document
Document document = reader.read(file);
  • 创建根元素并从document获取
 Element root = document.getRootElement();
  • 创建元素迭代器或属性迭代器获取相关元素和属性
  // iterate through child elements of root
for ( Iterator i = root.elementIterator(); i.hasNext(); ) {
Element element = (Element) i.next();
// do something
}
// iterate through attributes of root
for ( Iterator i = root.attributeIterator(); i.hasNext(); ) {
Attribute attribute = (Attribute) i.next();
// do something
}

以之前嵌套后的XML为例:

/**This method is for read XML
* @author Young
* @param file
* @throws DocumentException
*/
public static void readDocument(String file) throws DocumentException {
SAXReader reader = new SAXReader(); Document document = reader.read(file); Element root = document.getRootElement();
for (Iterator<?> i = root.elementIterator(); i.hasNext();) {
Element element = (Element) i.next();
if (!element.getName().equalsIgnoreCase("Student")) {
System.out.println("StudentInfo is:");
continue;
} // iterate through child elements of root with element name
// "student" for (Iterator<?> j = element.attributeIterator(); j.hasNext();) {
Attribute attribute = (Attribute) j.next();
System.out.print("attribute name " + attribute.getName()
+ " ->" + attribute.getName());
System.out.println(" attribute value " + attribute.getValue()); }
System.out.println("attribute value " + element.getText());
// get path
System.out.println("attribute name " + element.getName() + " ->"
+ element.getPath()); } }

可以通过:

getName/getPath/getValue 等方法是获取相关内容

运行结果:

attribute name name ->name attribute value Jack
attribute name Sex ->Sex attribute value Male
attribute name Birthday ->Birthday attribute value 1988/07/05
attribute value 100001 attribute name student ->/StudentInfo/student
attribute name name ->name attribute value Lisa
attribute name Sex ->Sex attribute value Female
attribute name Birthday ->Birthday attribute value 1989/02/12
attribute value 100002 attribute name student ->/StudentInfo/student
attribute name name ->name attribute value Steven
attribute name Sex ->Sex attribute value Male
attribute name Birthday ->Birthday attribute value 1987/11/18
attribute value 100003 attribute name student ->/StudentInfo/student
attribute name name ->name attribute value Jenny
attribute name Sex ->Sex attribute value Female
attribute name Birthday ->Birthday attribute value 1989/03/18
attribute value 100004 attribute name student ->/StudentInfo/student
attribute name name ->name attribute value Lucy
attribute name Sex ->Sex attribute value Female
attribute name Birthday ->Birthday attribute value 1990/01/26
attribute value 100005 attribute name student ->/StudentInfo/student
attribute name name ->name attribute value Lewis
attribute name Sex ->Sex attribute value Male
attribute name Birthday ->Birthday attribute value 1989/04/06
attribute value 100006 attribute name student ->/StudentInfo/student

java 处理XML(dom4j-1.6.1)的更多相关文章

  1. 转:在java中使用dom4j解析xml

    JAVA 使用Dom4j 解析XML Java DOM4J Parser - Parse XML Document Dom4j下载及使用Dom4j读写XML简介 在java中使用dom4j解析xml ...

  2. Java 读写XML文件 API--org.dom4j

    om4j是一个Java的XML API,类似于jdom,用来读写XML文件的.dom4j是一个十分优秀的JavaXML API,具有性能优异.功能强大和极其易使用的特点,同时它也是一个开放源代码的软件 ...

  3. Java解析XML汇总(DOM/SAX/JDOM/DOM4j/XPath)

    [目录] 一.[基础知识——扫盲] 二.[DOM.SAX.JDOM.DOM4j简单使用介绍] 三.[性能测试] 四.[对比] 五.[小插曲XPath] 六.[补充] 关键字:Java解析xml.解析x ...

  4. Java操作XML文件 dom4j 篇

    在项目中,我们很多都用到了xml文件,无论是参数配置还是与其它系统的数据交互.今天就来讲一下Java 中使用dom4j来操作XML文件. 我们需要引入的包: //文件包 import java.io. ...

  5. Java解析XML之Dom4j

    Java解析XML文件的方法有多种,个人感觉最常用的是使用Dom4j来解析XML文件.下面就简单介绍下Dom4j的基础使用. Dom4j需要jar包的支持,大家可以从网络上下载,如dom4j-1.6. ...

  6. XML概念定义以及如何定义xml文件编写约束条件java解析xml DTD XML Schema JAXP java xml解析 dom4j 解析 xpath dom sax

    本文主要涉及:xml概念描述,xml的约束文件,dtd,xsd文件的定义使用,如何在xml中引用xsd文件,如何使用java解析xml,解析xml方式dom sax,dom4j解析xml文件 XML来 ...

  7. java中利用dom4j解析XML文件

    官网下载Dom4j地址:https://dom4j.github.io/ 注意:使用Dom4j开发,需下载dom4j相应的jar文件 题目:后台利用dom4j解析student.xml文件,并返回Li ...

  8. Java操作XML牛逼利器JDOM&DOM4J

    JDOM  JDOM 是一种使用 XML(标准通用标记语言下的一个子集) 的独特 Java 工具包,用于快速开发 XML 应用 程序. JDOM 官方网站:http://www.jdom.org/ 利 ...

  9. java解析XML saxReader.read(xml) 错误:org.dom4j.DocumentException: no protocol

    java解析XML saxReader.read(xml) 错误:org.dom4j.DocumentException: no protocol 完整错误信息: org.dom4j.Document ...

  10. java对xml节点属性的增删改查

    学习本文之前请先看我的另一篇文章JAVA对XML节点的操作可以对XML操作有更好的了解. package vastsum; import java.io.File; import java.io.Fi ...

随机推荐

  1. iOS 底层框架的浅析

    1.简介 IOS是由苹果公司为iPhone.iPod touch和iPad等设备开发的操作系统. 2.知识点 iPhone OS(现在叫iOS)是iPhone, iPod touch 和 iPad 设 ...

  2. Android开发自学笔记(Android Studio)—4.2TextView及其子类

    一.引言 TextView是我们最常用的一个控件了,它类似于C# Winform程序中的Lable,Java Swing编程中的JLable,不过相对功能更强大些,但从功能上看,它其实就是个文字编辑器 ...

  3. 【jQuery api】isArray

    <!DOCTYPE html> <html> <head> <script src="http://code.jquery.com/jquery-l ...

  4. [转]Hibernate延迟加载与opensessioninviewFilter

    原文地址:http://blog.csdn.net/a19881029/article/details/7916702 hibernate延迟加载: 一个person对应多个school,使用hibe ...

  5. MySQL远程连接丢失问题解决方法Lost connection to MySQL server at ‘reading initial communication packet’, system error: 0

    最近远程连接mysql总是提示 Lost connection 很明显这是连接初始化阶段就丢失了连接的错误 其实问题很简单,都是MySQL的配置文件默认没有为远程连接配置好,只需要更改下MySQL的配 ...

  6. BZOJ 3236: [Ahoi2013]作业

    3236: [Ahoi2013]作业 Time Limit: 100 Sec  Memory Limit: 512 MBSubmit: 1393  Solved: 562[Submit][Status ...

  7. gulp watch出现Error: watch null EPERM的问题解释

    出现这样的问题,一般是第一次运行导致的,而且任务上有删除文件的操作. 我观察发现,只要把输出目录的文件删除,然后重新运行watch就一些ok,后者再运行一次gulp watch就一切正常.

  8. ionic ios 发布设置 header-bar高度无效

    在公司app发布过程中发现一旦改过header-bar的高度之后在ios内部或者通过ionic build browser生成的网页打开都不是正常的 通过chrome的查看工具发现自己写的样式被直接覆 ...

  9. c# .Net :Excel NPOI导入导出操作教程之List集合的数据写到一个Excel文件并导出

    将List集合的数据写到一个Excel文件并导出示例: using NPOI.HSSF.UserModel;using NPOI.SS.UserModel;using System;using Sys ...

  10. Google Maps API V3 之 路线服务

    Google官方教程: Google 地图 API V3 使用入门 Google 地图 API V3 针对移动设备进行开发 Google 地图 API V3 之事件 Google 地图 API V3 ...