DOM解析XML

来源:互联网 发布:巴以冲突 知乎 编辑:程序博客网 时间:2024/05/24 05:15

DOM解析SML

DOM

    文件对象模型,W3C组织推荐的处理可扩展置标语言的标准编程接口。    DOM可以以一种独立于平台和语言的方式访问和修改一个文档的内容和结构。是表示处理HTML和XML文档的常用方法。    DOM定义了表示和修改文档所需的对象,这些对象的行为和属性以及这些对象之间的关系。可以把DOM认为是页面上数据的结构的一个树形表示。

DOM结构

一级DOM

DOM核心能映射以XML为基础的文档结构,允许获取和操作文档的任意部分。

二级DOM

对原有DOM的扩展,二级DOM通过对象结构增加了对鼠标和用户界面事件、范围、遍历和层叠样式表的支持。

三级DOM

引入统一方式载入和保存文档和文档验证方法对DOM进行进一步扩展。三级DOM包含一个名为“DOM载入与保存”的新模块。DOM核心扩展后可支持XML1.0的所有内容。

“0”级DOM

没有标准被称为0级DOM,他是DOm历史上的一个参考点。

结点

文档中的每一个成分都是一个结点。结点的规定:    整个文档是一个文档结点。    每个HTML标签是一个元素结点。    HTML元素中的文本是文本结点。    每一个HTML属性是一个属性结点。    注释属于注释结点。

Node的层次

    HTML文档中的每个元素、属性、文本等都代表着树中的每一个结点。    树其实于文档节点,并由此继续延伸。

代码部分:

XML代码:

<?xml version="1.0" encoding="utf-8"?><persons>    <person>        <name>Alice</name>        <age>30</age>    </person>    <person>        <name>AXX</name>        <age>18</age>    </person></persons>

XML对应类:

/** * Created by hanlei on 2017/7/19. */public class Person {    String name;    int age;    public void setAge(int age) {        this.age = age;    }    public void setName(String name) {        this.name = name;    }    public int getAge() {        return age;    }    public String getName() {        return name;    }}

解析类:

package com.example.hanlei.dom_xml;import org.w3c.dom.Document;import org.w3c.dom.Element;import org.w3c.dom.Node;import org.w3c.dom.NodeList;import org.xml.sax.SAXException;import java.io.IOException;import java.io.InputStream;import java.util.ArrayList;import java.util.List;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import javax.xml.parsers.ParserConfigurationException;/** * Created by hanlei on 2017/7/19. */public class DOMPersonService {    public static List<Person> getPerson (InputStream inputStream) throws ParserConfigurationException, IOException, SAXException {        List<Person> persons=new ArrayList<Person>();        //获得DOM的解析器。        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();        //获得解析器实例。        DocumentBuilder documentBuilder = factory.newDocumentBuilder();        //输入解析文件。        Document document = documentBuilder.parse(inputStream);        //定义结点元素。        Element root = document.getDocumentElement();        //Nodelist接口提供了对接点有序的集合。        NodeList personNodes = root.getElementsByTagName("person");        for (int i = 0; i < personNodes.getLength(); i++)        {            //item返回结点的元素。如果索引大于或等于列表结点树,则返回null            Element personElement= (Element) personNodes.item(i);            Person person=new Person();            //getChildNodes:            //一个列表中的所有结点,如果没有子节点,就是一个不含结点的结点列表            NodeList childNodes=personElement.getChildNodes();            for(int y=0;y<childNodes.getLength();y++)            {                //getNodeType表示之前定义的底层对象数据类型。                //ELEMENT——NODE是静态结点。                if (childNodes.item(y). getNodeType()== Node.ELEMENT_NODE);                {                    if("name".equals(childNodes.item(y).getNodeName()))                    {                        String name=childNodes.item(y).getFirstChild().getNodeValue();                        person.setName(name);                    }else if("age".equals(childNodes.item(y).getNodeName()))                    {                        String age=childNodes.item(y).getFirstChild().getNodeValue();                        person.setAge(Integer.parseInt(age));                    }                }            }            persons.add(person);        }       inputStream.close();        return persons;    }}

测试类:

package com.example.hanlei.dom_xml;import org.xml.sax.SAXException;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.io.InputStream;import java.util.List;import javax.xml.parsers.ParserConfigurationException;/** * Created by hanlei on 2017/7/19. */public class PersonServiceTest {    public void PersonsServiceTest() throws IOException, SAXException, ParserConfigurationException {        InputStream inputStream=new FileInputStream("xiwang.xml");        List<Person> persons=DOMPersonService.getPerson(inputStream);        for(Person person:persons)        {            System.out.println("name="+person.getName());            System.out.println("age="+person.getAge());        }    }    public static void main(String [] args) throws ParserConfigurationException, SAXException, IOException {        new PersonServiceTest().PersonsServiceTest();    }}

学习总结:

今天的学习速度还是很快的,因为昨天晚上打下的基础,DOM的解析学习起来很好理解

微博:艾小汐丶 sj:2017年7月19日15:14:28

以上。