java解析XML方式
程序员文章站
2022-06-17 08:34:20
...
package com;
/*
* XML:指可扩展标记语言,是独立于软件和硬件的信息工具
* XML应用于web开发的许多方面,常用于简化数据的存储和共享。
* XML简化数据共享。
* XML简化数据传输。
* XML简化平台的变更。
*/
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;
/*
* XML解析方式:
* 1:SAX解析方式:它是一行一行的读的
* 优点:解析可以立即开始,速度快,占有内存资源少
* 缺点:不能对节点做修改
*
*
* 2:DOM解析方式:是W3C组织推荐的处理xml的一种方式。
* 它是一上来就把XML整个结构都读完了,然后把读到的东西放到内存中去,如果xml的东西多,那么存内存的东西就多
* 占用内存。
* 优点:把xml文件在内存中构造树形结构,可以遍历和修改节点
* 缺点:如果文件比较大,内存有压力,解析的时间会比较长。(耗时,耗资源)
*/
/*
* 使用DOM解析xml文档,使用的是SAXReader对象
*/
public class ParseXmlDemo {
public static void main(String[] args) {
/*
* 解析empList.xml文档,将所有的员工信息读取出来并转换为若干Emp实例,存入一个List集合中。
*
* 解析XML的流程:
* 1:创建SAXReader。
* 2:使用SAXReader读取XML文档并返回Document对象,这一步就是DOM解析耗时耗资源的体现,
* 因为DOM会将XML文档全部读取并以一个Document对象用于描述解析的XML文档内容。
* 3:根据Document对象获取根元素。
* 4:按照xml的结构从根元素中开始逐级获取子元素以达到遍历xml的目的。
*/
try {
//1
SAXReader reader=new SAXReader();
//2 empList.xml在项目的根目录下,所以这里可以直接写,不用写路径
Document doc=reader.read(new FileInputStream("empList.xml"));
/*
* 3获取根元素
* Element的每一个实例用于表示xml文档中的一个元素(一对标签),
* 这里获取的相当于是empList.xml文档中的<empList>标签。
*/
Element root=doc.getRootElement();
/*
* Element提供了获取元素的相关方法:
*
* List elements():获取当前标签下的所有子标签
* List elements(String name):获取当前标签下所有同名子标签(如果子标签有多种,想获取指定的子标签就用这种)
* Element element(String name):获取指定名字的子标签
* Attribute attribute(String name):获取指定名字的属性
* String getTest():获取当前标签中的文本(前标签和后标签中间的文本信息,前提是确实为文本而不是子标签)
*/
List<Emp> empList=new ArrayList<Emp>();
//获取根标签<empList>下面的所有子标签<dept>,这里elements实例实际上就是每一个<dept>标签。
List<Element> deptElement=root.elements(); //root.elements("dept") 意思是获取所有子标签是dept的的子标签。
/*
* 遍历所有<dept>标签并解析出该员工相关信息并以一个Emp实例保存,然后将其存入empList集合中
*/
for(Element depEle:deptElement) {
//获取标签<dept>下面的所有子标签<emp>,这里elements实例实际上就是每一个<emp>标签。
List<Element> empElement=depEle.elements(); //root.elements("emp") 意思是获取所有子标签是emp的的子标签。
for(Element empEle:empElement) {
//获取到<name>这个标签
Element nameEle=empEle.element("name");
String name=nameEle.getText();//nameEle.getTextTrim() 这样是去除内容前后的空格
//获取年龄
int age=Integer.parseInt(empEle.elementTextTrim("age"));
//获取性别
String gender=empEle.elementTextTrim("gender");
//获取工资
Double salary=Double.parseDouble(empEle.elementTextTrim("salary"));
System.out.println("name:"+name+" | age:"+age+" | gender:"+gender+" | salary:"+salary);
/*
* 获取属性,属性是写在标签里面的,如<emp id="1" nn="nn" xx="xx">
* 这里也可以attribute(0)意思是取<emp id="1" nn="nn" xx="xx">里第1个,也就是id="1"
* Attribute实例就是表示标签的属性。
*/
Attribute attr=empEle.attribute("id");
String attrName=attr.getName();
int idValue=Integer.parseInt(attr.getValue());
System.out.println("属性名:"+attrName+" | 属性值:"+idValue);
Emp emp=new Emp(idValue,name,age,gender,salary);
empList.add(emp);
}
}
System.out.println("============解析完毕!!!!============");
System.out.println("============共"+empList.size()+"个员工信息============");
for(Emp emp:empList) {
System.out.println(emp);
}
}catch(Exception e) {
e.printStackTrace();
}
}
}
empList.xml内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<empList>
<dept name="IT">
<emp id="1" nn="nn" xx="xx">
<name>张三</name>
<age>34</age>
<gender>男</gender>
<salary>3000</salary>
</emp>
<emp id="2">
<name>李四</name>
<age>30</age>
<gender>女</gender>
<salary>4000</salary>
</emp>
<emp id="3">
<name>王五</name>
<age>24</age>
<gender>男</gender>
<salary>7000</salary>
</emp>
</dept>
<dept name="XIAOSHOU">
<emp id="1">
<name>张三10</name>
<age>70</age>
<gender>男</gender>
<salary>30000</salary>
</emp>
</dept>
</empList>
控制台输出结果:
需要的jar包:
<dependencies>
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6.1</version>
</dependency>
</dependencies>
推荐阅读
-
mybatis xml配置文件读取不了 properties的属性 博客分类: Java mybatis xml 注入不了 ${} properties 数据源
-
mybatis xml配置文件读取不了 properties的属性 博客分类: Java mybatis xml 注入不了 ${} properties 数据源
-
java进行pdf解析-----pdfbox 博客分类: 技术 Javalucene编程FlashIDEA
-
java中进程与线程_三种实现方式总结(必看篇)
-
Java发送邮件和短信最常用的方式有哪些?_html/css_WEB-ITnose
-
php获取通过http协议post提交过来xml数据及解析xml
-
java string类方法深入解析
-
Java DOM4J方式生成XML的方法
-
JAVA数据结构-1.普通队列和循环队列的实现以及JAVA的Queue的使用解析
-
php 解析 xml 格式-该怎么处理