Uuit12:XML语法XML解析
Posted amazingweiwei
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Uuit12:XML语法XML解析相关的知识,希望对你有一定的参考价值。
1. xml语法
1)头固定:<?xml version="1.0" encoding="UTF-8"?>
2)根标签:一个xml文件,只能有一个根标签
3)根标签下面可以有多个子标签,子标签可以嵌套
4)子标签内可以有属性值
5)标签格式:<list></list>
6)codeDemo: 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>
</list>
2. DOM解析xml文档
1)解析XML流程
1>创建SAXReader
SAXReader reader = new SAXReader();
2>使用SAXReader读取XML文档并返回Document对象,
这一步就是DOM解析耗时耗资源的体现,因为DOM会将XML文档全部读取并以一个Document对象形式存入内存,Document对象用于描述解析的XML文档。
Document doc = reader.read(new FileInputStream("emplist.xml“));
3>根据Document获取根元素 getRootElement();
/*
Element的每一个实例用于表示xml文档中的一个元素(一对标签)
这里获取的相当于是emplist.xml中的<list>标签
*/
Element root = doc.getRootElement();
4>按照XML的结构从根元素中开始逐级获取子元素以达到遍历xml的目的.
2)Elempent 通过了获取元素的相关方法
1> String getName()
获取当前标签的名字
2> List Elements()
获取当前标签下的所有子标签
3> List Elements(String name)
获取当前标签下的所有同名子标签
4> Element element(String name)
获取指定名字的子标签
5> Attribute attribute(String name)
获取指定名字的属性
常用方法:
Sring getName()
获取当前属性名
String getValue()
获取当前属性值
6> String getText()
获取当前标签中的文本(前标签和后标签中的文本信息,前提是确实为文本而不是子标签)
3)codeDemo:
//创建Emp的list集合,保存员工信息
List<Emp> empList = new ArrayList<Emp>();
/*
* 获取根标签<list>下的所有子标签
*/
List<Elements> elements = root.Elements();
/*
* 遍历所有<emp>标签并解析该员工相关信息,并以一个Emp实例保存,然后将其存入empList集合
*/
for(Element empEle : elements){
//获取名字
String name = empEle.element("name").getTextTrim();
//获取年龄
int age = Integer.parseInt(empEle.elementTextTrim("age"));
//获取性别
String gerder = empEle.elementTextTrim("gender");
//获取工资
int salary = Integer.parseint(empEle.emlemnetTextTrim("salary"));
/*
* 获取emp标签中的id属性值
* Attribute的每一个实例用于表示一个属性信息,常用方法有:
* String getName() 获取当前属性名
* String getValue() 获取当前属性值
*/
Attribute att = empEle.attribute("id");
int id = Integer.parseInt(att.getValeu());
//创建Emp实例,并存入empList集合
Emp emp = new Emp(id, name, age, gender, salary);
empList.add(emp);
}
//解析完毕,for each 循环遍历empList集合
for(Emp emp : empList){
System.out.println(emp);
}
//上面这些都在try catch块中,要抛出异常..
3. DOM生成xml文档
1)生成xml文档的大致步骤:
1> 创建一个Document对象表示一个空白文档
Document document = DocumentHelper.createDocument();
2> 向Document对象中添加根元素(根标签)
Element addElement(String name)
该方法可以向当前文档汇总添加给定名字的根元素,并将添加进去的该元素以一个Element实例返回,以便于对该元素进行操作;
需要注意,该方法只能调用一次,因为一个文档中只能有一个根元素.
Element root = document.addElement("List");
3> 按照应当生成的xml文档的格式逐级向根元素中添加子元素已形成xml文档格式
相关方法:
· Element addElement(String name)
向当前文档中添加给定名字的子标签并将其返回,以便继续操作.
· Element addText(String text)
向当前标签中添加文本信息,返回值为当前标签
· Element addAttribute(String name, String value)
向当前标签中添加属性,返回值为当前标签
/*
List<Emp> empList = new ArrayList<Emp>();
empList.add(new Emp(1, "张三", 22, "男", 3000));
empList.add(new Emp(2, "李四", 23, "女", 4000));
*/
/*
* 将empList集合中的每个员工信息以一个<emp>标签的形式保存到<list>标签中
*/
for(Emp emp : empList){
//向根标签<list>中添加子标签<emp>
Eelement empEle = root.addElement("emp");
//向<emp>标签中添加<name>标签
Element nameEle = empEle.addElement("name");
nameEle.addText(emp.getname);
//添加age
Element ageEle = empEle.addElement("age").addText(emp.getAge() + "");
//添加性别
Element genderEle = empEle.addElement("gender").addText(emp.getGendr());
//添加工资
Elemnet salaryEle = empEle.addElement("salary").addText(emp.getSalary() + "");
//添加属性id
empEle.addAttribute("id", emp.getId() + "");
}
4> 创建XMLWriter
FileOutStream fos = new FileOutStream("myEmp.xml");
XMLWriter writer = new XMLWriter(fos, OutputFormat.createPrettyPrint()); //格式化输出
5> 通过XMLWriter将Document写出
writer.write(document);
4. xpath检索XML数据
1)Document支持使用XPath检索数据,前提是必须引入jaxen.jar包
2)xpath语法
1> nodename
选取此节点的所有子节点
2> /
从根节点选取
3> //
从匹配选择的当前节点选择文档中的节点,而不考虑他们的位置
4> .
选取当前节点
5> ..
选取当前节点的父节点
6> @
选取属性
3)codeDemo:语法太多了,搞定常用的就行了
package day12;
import java.io.FileInputStream;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
/**
* 使用XPath检索XML数据
* @author Administrator
*
*/
public class XPathDemo {
public static void main(String[] args) {
try {
SAXReader reader = new SAXReader();
Document doc = reader.read(new FileInputStream("myEmp.xml"));
/*
* Document支持使用xpath检索数据,前提是必须引入jaxen.jar包
*/
//找出list/emp/工资大于4000的员工姓名
String xpath = "/list/emp[salary > 4000]/name";
List<Element> list = doc.selectNodes(xpath);
for(Element ele : list) {
System.out.println(ele.getName()+ ":" + ele.getTextTrim());
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
/*
name:王五
name:赵六
name:钱七
*/
以上是关于Uuit12:XML语法XML解析的主要内容,如果未能解决你的问题,请参考以下文章