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解析的主要内容,如果未能解决你的问题,请参考以下文章

XML的DOM解析常用语法

JAVASE02-Unit012: Unit07: XML语法 XML解析

大话XML解析

Python-Json字符串和XML解析

用简洁的语法解析 XML

4-8《XML与JSON》——XML解析XMLSAXDOM4JXStreamJSONGsonFastjson