java 处理XML(dom4j-1.6.1)
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)的更多相关文章
- 转:在java中使用dom4j解析xml
JAVA 使用Dom4j 解析XML Java DOM4J Parser - Parse XML Document Dom4j下载及使用Dom4j读写XML简介 在java中使用dom4j解析xml ...
- Java 读写XML文件 API--org.dom4j
om4j是一个Java的XML API,类似于jdom,用来读写XML文件的.dom4j是一个十分优秀的JavaXML API,具有性能优异.功能强大和极其易使用的特点,同时它也是一个开放源代码的软件 ...
- Java解析XML汇总(DOM/SAX/JDOM/DOM4j/XPath)
[目录] 一.[基础知识——扫盲] 二.[DOM.SAX.JDOM.DOM4j简单使用介绍] 三.[性能测试] 四.[对比] 五.[小插曲XPath] 六.[补充] 关键字:Java解析xml.解析x ...
- Java操作XML文件 dom4j 篇
在项目中,我们很多都用到了xml文件,无论是参数配置还是与其它系统的数据交互.今天就来讲一下Java 中使用dom4j来操作XML文件. 我们需要引入的包: //文件包 import java.io. ...
- Java解析XML之Dom4j
Java解析XML文件的方法有多种,个人感觉最常用的是使用Dom4j来解析XML文件.下面就简单介绍下Dom4j的基础使用. Dom4j需要jar包的支持,大家可以从网络上下载,如dom4j-1.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来 ...
- java中利用dom4j解析XML文件
官网下载Dom4j地址:https://dom4j.github.io/ 注意:使用Dom4j开发,需下载dom4j相应的jar文件 题目:后台利用dom4j解析student.xml文件,并返回Li ...
- Java操作XML牛逼利器JDOM&DOM4J
JDOM JDOM 是一种使用 XML(标准通用标记语言下的一个子集) 的独特 Java 工具包,用于快速开发 XML 应用 程序. JDOM 官方网站:http://www.jdom.org/ 利 ...
- java解析XML saxReader.read(xml) 错误:org.dom4j.DocumentException: no protocol
java解析XML saxReader.read(xml) 错误:org.dom4j.DocumentException: no protocol 完整错误信息: org.dom4j.Document ...
- java对xml节点属性的增删改查
学习本文之前请先看我的另一篇文章JAVA对XML节点的操作可以对XML操作有更好的了解. package vastsum; import java.io.File; import java.io.Fi ...
随机推荐
- EasyUI datagrid : 启用行号、固定列及多级表头后,头部行号位置单元格错位的问题
症状如图: 上图中,行号列与checkbox 列融合了.解决方法是在datagrid 的 onLoadSuccess 事件中加入如下代码: var opts = $(this).datagrid('o ...
- 直接启动tomcat时为tomcat指定JDK
第一种: 在windows环境下以批处理文件方式启动tomcat,只要运行<CATALINA_HOME>/bin/startup.bat这个文件,就可以启动Tomcat.在启动时,star ...
- 测试工作的疑难杂症bugs
一. 平台:安卓app 代码:重写onresume事件时,没有重新获取sessionId导致记录一下bug重现过程:1.登陆2.退出用户(不退出app)3.重新登录4.home键或者息屏5.再进入ap ...
- ASP.net MVC 学习笔记(一)-一些不同点
1.在 MVC 中,请求到 Controller 中时,系统会判断是那个类的方法当执行完 return 时,系统会自动在 View 中寻找同名的 aspx 文件 来进行展示 实际上每一个 Contro ...
- C#程序员的春天之从零开始学习unity3D游戏开发入门教程二(创建项目及基本面板介绍)
一项目创建: 创建项目是开发的第一步. 运行untiy之后如果是第一次运行会弹出 我们这里随便创建一个项目. 二Untiy面板介绍: 三代码编辑器的切换: 这里我安装了vs2012. 到这里开发环境基 ...
- c#资料
类型系统: 运行模型: 整型: 浮点: 财务: 布尔: 字符: 引用类型: Console控制字符: {序号,空间:控制字符与精度} 如:{0,3:C2} {空间:#.00} 其中,#表示该位置如果有 ...
- java certificate 工具 portecle.sourceforge.net
https://sourceforge.net/projects/portecle/?source=directory 当需要处理java证书的时候这个是个好工具.省得敲命令了.
- C 语言学习 第一次作业总结
第一次的作业是冯老师布置的练习题,需要在pta平台上完成.我这边看不到结果,但是透过冯老师给出的截图,同学们都还是认真的去做的.同时,我这边也布置了一个持续 3 周的作业:熟悉 git 的使用.因为后 ...
- url参数中带有+号,服务器端解码之后没了
解决办法: 客户端:encodeURIComponent 服务器端:Uri.UnescapeDataString 参考网址:http://www.cnblogs.com/artwl/archive/2 ...
- host 文件
艾玛,果然一个破的小问题也能纠结好久!不过终于过去了... 1. 机器上的host文件目录一般是 /etc/hosts 主要可能会涉及一些网站的安全访问,把网站加入hosts也就意味着 加入了白名单 ...