Unit07: XML语法 、 XML解析    

emplist.xml

<?xml version="1.0" encoding="UTF-8"?>
<list>
<emp id="1">
<name>张三</name>
<age>34</age>
<gender>男</gender>
<salary>3000</salary>
</emp>
<emp id="2">
<name>李四</name>
<age>21</age>
<gender>女</gender>
<salary>4000</salary>
</emp>
<emp id="3">
<name>王五</name>
<age>46</age>
<gender>女</gender>
<salary>6500</salary>
</emp>
<emp id="4">
<name>赵六</name>
<age>28</age>
<gender>男</gender>
<salary>4400</salary>
</emp>
<emp id="5">
<name>钱七</name>
<age>53</age>
<gender>男</gender>
<salary>12000</salary>
</emp>
</list>

emplist.xml

myemp.xml

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

<list>
<emp id="1">
<name>张三</name>
<age>22</age>
<gender>男</gender>
<salary>5000</salary>
</emp>
<emp id="2">
<name>李四</name>
<age>23</age>
<gender>女</gender>
<salary>6000</salary>
</emp>
<emp id="3">
<name>王五</name>
<age>24</age>
<gender>男</gender>
<salary>7000</salary>
</emp>
<emp id="4">
<name>赵六</name>
<age>25</age>
<gender>女</gender>
<salary>8000</salary>
</emp>
<emp id="5">
<name>钱七</name>
<age>26</age>
<gender>男</gender>
<salary>9000</salary>
</emp>
</list>

myemp.xml

用当前类的实例保存xml文档中的一个员工信息 (这个是用构造方法生成的)

package day12;
/**
* 用当前类的实例保存xml文档中的一个员工信息
* @author adminitartor
*
*/
public class Emp {
private int id;
private String name;
private int age;
private String gender;
private int salary; public Emp(){ } public Emp(int id, String name, int age, String gender, int salary) {
super();
this.id = id;
this.name = name;
this.age = age;
this.gender = gender;
this.salary = salary;
} public int getId() {
return id;
} public void setId(int id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} public String getGender() {
return gender;
} public void setGender(String gender) {
this.gender = gender;
} public int getSalary() {
return salary;
} public void setSalary(int salary) {
this.salary = salary;
} public String toString(){
return id + "," + name + "," +
age + "," + gender + "," +
salary;
}
}

Emp.java

* 使用DOM4J解析XML文档

package day12;

import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.List; import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader; /**
* 使用DOM4J解析XML文档
*
* 将emplist.xml文档中的所有员工信息解析出来
* 并存入到一个List集合保存
* @author adminitartor
*
*/
public class ParseXmlDemo {
public static void main(String[] args) {
/*
* 使用DOM4J解析XML的大致流程
* 1:创建SAXReader
* 2:使用SAXReader读取XML文档,并返回
* 一个Document对象。
* 这一步就是DOM解析XML耗时耗资源的地方
* 因为这一步就会将XML文档中所有内容解析
* 出来并以一个Document对象保存。由于对象
* 存于内存,所以文档内容大的话会相应消耗
* 资源。
* 3:从Document中获取根元素
* 4:根据XML文档结构从根元素中逐级获取子元
* 素,最终达到遍历XML文档数据的目的。
*/
try {
//1
SAXReader reader = new SAXReader(); //2读取xml文档并返回Document对象
// reader.read(new File("emplist.xml"));
Document doc = reader.read(
new FileInputStream("emplist.xml")
);
System.out.println("读取xml文档完毕!"); /*
* 3 获取根元素
* Element的每一个实例用于表示XML文档
* 中的一个元素(一对标签)
*
* Element用于获取当前标签信息的相关方法:
*
* String getName()
* 获取当前标签的名字
*
* String getText()
* 获取当前标签中间的文本信息
*
* List elements()
* 获取当前标签下的所有子标签
*
* List elements(String name)
* 获取当前标签下所有同名子标签
*
* Element element(String name)
* 获取当前标签下指定名字的子标签
*
* String elementText(String name)
* 获取当前标签下指定名字的子标签中间的
* 文本。
* ele.elementText(name)
* 相当于调用了:
* ele.element(name).getText()
*
* Attribute attribute(String name)
* 获取当前标签下指定名字的属性
*
*/
Element root = doc.getRootElement();
/*
* 该集合用于保存从xml文档中解析出来的
* 所有员工信息
*/
List<Emp> empList = new ArrayList<Emp>(); //获取根标签<list>下面的所有子标签<emp>
List<Element> list = root.elements();
/*
* 遍历每一个员工标签<emp>,并将信息保存
* 到一个Emp对象上,然后存入empList集合
*/
for(Element empEle : list){
//获取name
Element nameEle = empEle.element("name");
String name = nameEle.getText();
// System.out.println(name); //获取age
int age = Integer.parseInt(
empEle.elementText("age")
); //gender
String gender = empEle.elementText("gender"); //salary
int salary = Integer.parseInt(
empEle.elementText("salary")
);
/*
* Attribute的每一个实例用于表示某个标签
* 中的一个属性。
* 常用方法:
* String getName()
* 获取属性名
*
* String getValue()
* 获取属性值
*/
Attribute attri = empEle.attribute("id");
int id = Integer.parseInt(
attri.getValue()
); Emp emp = new Emp(id, name, age, gender, salary);
empList.add(emp);
} System.out.println("解析完毕!"); for(Emp emp : empList){
System.out.println(emp);
} } catch (Exception e) {
e.printStackTrace();
} }
}

ParseXmlDemo.java

* 使用DOM4J生成XML文档

package day12;

import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.List; import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter; /**
* 使用DOM4J生成XML文档
* @author adminitartor
*
*/
public class WriteXmlDemo {
public static void main(String[] args) {
/*
* 生成XML文档的大致步骤:
* 1:创建一个Document对象表示一个空白
* 文档
* 2:向Document中添加根元素
* 3:按照想生成的xml文档的结构顺序逐级的
* 向根元素中添加子元素以及对应的信息
* 4:创建XmlWriter对象
* 5:将Document对象写出以形成xml文档
* 6:关闭XmlWriter
*/
try {
List<Emp> empList = new ArrayList<Emp>();
empList.add(new Emp(1,"张三",22,"男",5000));
empList.add(new Emp(2,"李四",23,"女",6000));
empList.add(new Emp(3,"王五",24,"男",7000));
empList.add(new Emp(4,"赵六",25,"女",8000));
empList.add(new Emp(5,"钱七",26,"男",9000)); //1 创建一个空白文档
Document doc = DocumentHelper.createDocument(); /*
* 2 向文档中添加根元素
* Element addElement(String name)
* 添加给定名字的根元素,并将该元素以Element
* 实例形式返回,以便于继续操作。
*
* 注意,该方法只能调用一次,因为一个文档只能有
* 一个根元素
*
*/
Element root = doc.addElement("list"); /*
* 3 添加子标签以形成xml文档结构
* 将集合中的每个员工信息作为一个<emp>标签
* 添加到根标签中
*/
for(Emp emp : empList){
/*
* Element提供了添加相应信息的方法:
*
* Element addElement(String name)
* 向当前标签中添加给定名字的子标签并将其
* 返回。
*/
Element empEle = root.addElement("emp"); //向<emp>标签中添加<name>标签
Element nameEle = empEle.addElement("name");
//向<name>标签中添加文本信息
nameEle.addText(emp.getName()); empEle.addElement("age").addText(emp.getAge()+""); empEle.addElement("gender").addText(emp.getGender()); empEle.addElement("salary").addText(emp.getSalary()+"");
/*
* 向<emp>标签中添加属性"id"
*/
empEle.addAttribute("id", emp.getId()+"");
} //4
XMLWriter writer = new XMLWriter(
new FileOutputStream("myemp.xml"),
OutputFormat.createPrettyPrint()
); writer.write(doc);
System.out.println("写出完毕!");
writer.close();
} catch (Exception e) {
e.printStackTrace();
} }
}

WriteXmlDemo.java

* 使用XPath检索XML数据

package day12;

import java.io.File;
import java.util.List; import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader; /**
* 使用XPath检索XML数据
* @author adminitartor
*
*/
public class XpathDemo {
public static void main(String[] args) {
try {
SAXReader reader = new SAXReader();
Document doc = reader.read(
new File("myemp.xml")
);
String path = "/list/emp[gender='女' and age>24]/salary";
List<Element> list = doc.selectNodes(path);
for(Element e : list){
System.out.println(e.getText());
} } catch (Exception e) {
e.printStackTrace();
}
}
}

XpathDemo.java

JAVASE02-Unit012: Unit07: XML语法 、 XML解析的更多相关文章

  1. 16.XML语法、CDATA、约束(DTD、Schema)讲解

    xml主要用来描述数据,比如配置文件,网络之间传输数据等,并且在android中也经常用xml来布局,,接下来便来学习xml常用的东西 1.XML语法 xml语法分为: 1.1 文档声明 必须位于文档 ...

  2. xml语法、DTD约束xml、Schema约束xml、DOM解析xml

    今日大纲 1.什么是xml.xml的作用 2.xml的语法 3.DTD约束xml 4.Schema约束xml 5.DOM解析xml 1.什么是xml.xml的作用 1.1.xml介绍 在前面学习的ht ...

  3. JAVA企业级开发-xml基础语法&约束&解析(04)

    一.什么是xml html:超文本标记语言.它主要是用来封装页面上要显示的数据,最后通过浏览器来解析html文件,然后把数据展示在浏览器上.同样我们可以使用JS和DOM技术对html文件进行解析和操作 ...

  4. Android基础总结(12)——XML和JSON解析

    XML和JSON解析 在网络上传输数据时最常用的格式有两种:XML和JSON.本文主要就是学习如何对这两种常用的数据格式进行解析. 1.XML和JSON的定义 XML:扩展标记语言 (Extensib ...

  5. 【风马一族_xml】xml语法

    xml语法 文档声明 用来声明xml的属性,用来指挥解析引擎如何去解析当前xml 通常一个xml都要包含并且只能包含一个文档声明 xml的文档必须在整个xml的最前面,在文档声明之前不能有任何内容 & ...

  6. XML 语法规则

    转摘自:http://www.w3school.com.cn/xml/xml_elements.asp XML 语法规则 XML 文档包含 XML 元素. XML 的语法规则很简单,且很有逻辑.这些规 ...

  7. iOS开发网络篇—XML数据的解析

     iOS开发网络篇—XML数据的解析 iOS开发网络篇—XML介绍 一.XML简单介绍 XML:全称是Extensible Markup Language,译作“可扩展标记语言” 跟JSON一样,也是 ...

  8. [置顶] Android开发之XML文件的解析

    Android系统开发之XML文件的解析 我们知道Http在网络传输中的数据组织方式有三种分别为:XML方式.HTML方式.JSON方式.其中XML为可扩展标记语言,如下: <?xml vers ...

  9. [SQLXML]FOR XML语法导出XML的易错之处

    原文:[SQLXML]FOR XML语法导出XML的易错之处 [SQLXML]FOR XML语法导出XML的易错之处 Version Date Creator Description 1.0.0.1 ...

随机推荐

  1. Ansible 小手册系列 七(Ad-hoc)

    Ansible提供两种方式去完成任务,一是 ad-hoc 命令,一是写 Ansible playbook.前者可以解决一些简单的任务, 后者解决较复杂的任务. ad hoc——临时的,在ansible ...

  2. hdu4309

    题解: 暴力枚举 然后网络流 代码: #include<iostream> #include<cstdio> #include<cstring> using nam ...

  3. hdu2732

    题解: 和上一题差不多 然后注意格式 代码: #include<cstdio> #include<cmath> #include<algorithm> #inclu ...

  4. 如何解决虚拟机中的ubuntu系统方向键与退格键不能正常使用的问题

    问题描述: 在虚拟机中安装了ubuntu系统,打开vi,当vi进入insert模式后,后退键(backspace)不能删除字符,上下左右键也对应了W,S,A,D. 解决办法: cp /etc/vim/ ...

  5. wma wmv asf格式分析

    原文链接:http://blog.csdn.net/werocpp/article/details/5594067 原文链接:http://blog.chinaunix.net/uid-2075819 ...

  6. [置顶] JVM层对jar包字节码加密

    github https://github.com/sea-boat/ByteCodeEncrypt 需求 拿到的需求是要对某特定的jar包实现加密保护,jar包需要提供给外部使用,但核心逻辑部分需要 ...

  7. EasyPlayer RTSP播放器:一个适用于安防行业的工具利器(EasyPlayer Windows v2.0.17.0709)

    本文转自EasyDarwin开源团队成员Sword的博客:http://blog.csdn.net/swordtwelve EasyPlayer(Windows) v2.0.17.0709版本又更新发 ...

  8. EasyPlayer RTSP安卓Android播放器架构简析

    本文转自EasyDarwin开源团队成员John的博客:http://blog.csdn.net/jyt0551/article/details/73310641 EasyPlayer 是一款小而美的 ...

  9. ios图标生成器网址 插件禁用后,可以选择这个

    1. 可以使用在线移动图标生成工具:图标工场http://icon.wuruihong.com/网站自动生成iOS所需的所有对应格式的图标 2. 如果直接选择iOS,会自动生成29pt.40pt.50 ...

  10. Linux libusb 安装及简单使用

    Linux libusb 安装及简单使用 一.参考文档: . libusb1 fails do_configure task with “udev support requested but libu ...