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. 移动web开发—页面头部 META 总结

    meta指元素可提供有关页面的元信息(meta-information),比如针对搜索引擎和更新频度的描述和关键词. 标签位于文档的头部,不包含任何内容. 标签的属性定义了与文档相关联的名称/值对. ...

  2. iOS开发小技巧--微博项目中的键盘工具条

    微博项目中的键盘工具条 项目中的键盘工具条不能使用inputAccessoryView,因为inputAccessoryView不能实现键盘隐藏的时候,工具条还显示在眼前,如图: 所以,果断决定将工具 ...

  3. Asp.Net MVC<六>:Controller、Action 待续

    控制器 抽象类Controller Visual Studio的向导创建的Controller类型继承自抽象类Controller. 它是ControllerBase的子类. 实现了IControll ...

  4. 别再抱怨了,国内这么多优秀的Android资源你都知道吗?

    因为一些大家都知道的原因,android很多官方出品的优秀开发资源在国内无法访问. 国内的同行们对此也做出了很多努力,有很多朋友通过各种手段把很多优秀的资源搬运到了国内,为国内android开发者提供 ...

  5. bzoj 4318 OSU!

    期望dp. 考虑问题的简化版:一个数列有n个数,每位有pi的概率为1,否则为0.求以每一位结尾的全为1的后缀长度的期望. 递推就好了. l1[i]=(l1[i-1]+1)*p[i]+0*(1-p[i] ...

  6. Bzoj3144 [Hnoi2013]切糕

    Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1494  Solved: 818 Description Input 第一行是三个正整数P,Q,R,表 ...

  7. miniui后台无法接收到input传值

    出错原因:在miniui中,此处应写成<input textName="current_unit",在php中才可以使用$_POST['current_unit']获取到值, ...

  8. wildfly jboss 优化配置

    参考调优:http://www.mastertheboss.com/jboss-server/jboss-performance/jboss-as-7-performance-tuning?showa ...

  9. 机器学习笔记—svm算法(上)

    本文申明:本文原创,如转载请注明原文出处. 引言:上一篇我们讲到了logistic回归,今天我们来说一说与其很相似的svm算法,当然问题的讨论还是在线性可分的基础下讨论的. 很多人说svm是目前最好的 ...

  10. IBatis存储过程返回值

    <parameterMaps> <parameterMap id="delVersionBagInfoParam" class="DelVersionB ...