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. Week08《Java程序设计》第八次学习总结

    Week08<Java程序设计>第八次学习总结 1. 本周学习总结 以你喜欢的方式(思维导图或其他)归纳总结集合相关内容. 答: 2.书面作业 1. ArrayList代码分析 1.1 解 ...

  2. mac下iterm2快捷方式

    mac下iterm2,一些技巧,做个记录,大部分参考别人的加上自己的补充: 其中option + 左右键来跳转单词还是有问题,结果变为[D[C,等我摸索好了再来补充. 窗口 新建tab:⌘ + t 切 ...

  3. 如何将dom4j的jar包放到java项目中

    ---恢复内容开始--- 如果你建的是java project项目的话,那就通过Myeclispe中的右键你的项目名称,选择build path ->config build path... 然 ...

  4. java事务(三)

    java事务(三)——自己实现分布式事务 在上一篇<java事务(二)——本地事务>中已经提到了事务的类型,并对本地事务做了说明.而分布式事务是跨越多个数据源来对数据来进行访问和更新,在J ...

  5. 添加机构organizations模块

    startapp organizations models内容: from django.db import models from datetime import datetime # Create ...

  6. 在VC2015里包含了lib库,但没有设置对路径的出错

    它的提示出错如下: 这时需要在路径: 在附加的目录里添加上lib的路径. 1. RPG游戏从入门到精通 http://edu.csdn.net/course/detail/5246 2. WiX安装工 ...

  7. 在ROS Kinetic中使用Gazebo 8进行机器人仿真

    在ROS Kinetic中使用Gazebo 8比在ROS Indigo中使用Gazebo 3-8要容易一些. 目前最新稳定版本的Gazebo8为8.1.1. 安装流程如下: $  sudo apt-g ...

  8. Okhttp之连接池ConnectionPool简单分析(一)

    开篇声明:由于本篇博文用到的一些观点或者结论在之前的博文中都已经分析过,所以本篇博文直接拿来用,建议读此博文的Monkey们按照下面的顺序读一下博主以下博文,以便于对此篇博文的理解: <Okht ...

  9. Xcode9 新功能

    翻译: https://developer.apple.com/library/content/documentation/DeveloperTools/Conceptual/WhatsNewXcod ...

  10. CF1114B Yet Another Array Partitioning Task

    CF1114B Yet Another Array Partitioning Task 贪心,选择前 \(k*m\) 大的元素对答案进行贡献. 每次划分时,从当前位置往后扫,扫到 \(m\) 个前 \ ...