DOM解析XML

来源:互联网 发布:windows movie marker 编辑:程序博客网 时间:2024/06/05 06:28

XML 是扩展标记语言

1、XML是一种通用的数据交换格式。它跟平台无关、语言无关。为系统集成和数据交换带来了便利。2、常见解析方案: DOM   SAX

XML的编写

1. XML声明任何一个XML文档的第1行都应该是该文档的声明,其格式如下:<?xml version=”1.0” standalone=”yes/no” encoding=”UTF-8”?> 1、声明的作用是告诉浏览器或者其他处理程序:这个文档是XML文档。2、声明语句中的version表示文档遵守的XML规范的版本;standalone表示此文档是否为独立文档(文档如果包含DTD文件则不是独立文档),如果是,参数为yes;encoding表示文档所用的字符集,默认是UTF-8。3、XML声明也是一个XML处理指令。处理指令以“<?”开始,而以“?>”结束。在“<?”后的第一个单词是处理指令名,这里是xml,代表XML声明。

Document对象

    (1)Document对象表示文档节点树的根,通常对XML文件的操作就是从Document开始的,Document对象提供的方法和属性可以对XML文件遍历、查询、修改等。    (2)常用属性:    documentElement:返回文档的根元素节点    parsed:返回是否所有节点已被解析    (3)常用方法:    getElementById(id):返回拥有带有给定值的ID属性的元素    getElementsByTagName(name):返回文档中拥有特定类型名称的所有元素列表    (4)        // 得到DocumentBuilder工厂对象        DocumentBuilderFactory  dbFactory=DocumentBuilderFactory.newInstance();        // 得到DocumentBuilder对象        DocumentBuilder dBuilder=dbFactory.newDocumentBuilder();        // 得到Document对象        Document document=dBuilder.parse(getServletContext().getRealPath(                            "bookstore.xml”);

Node对象

(1)Node对象是DOM的主要对象,DOM规范中有很大一部分对象都继承自Node对象。(2)常用属性:        nodeName/nodeType/nodeValue        ownerDocument        parentNode/childNodes/firstChild/lastChild        previousSibling/nextSibling(3)常用方法:        hasChildNodes        getChildNodes        selectNodes/selectSingleNode

NodeList对象

(1)NodeList接口提供了对节点集合的抽象定义,用于表示有顺序关系的一组节点,比如某个节点的子节点序列,可通过节点列表中的节点索引号来访问列表中的节点。 一般可以使用循环结构进行遍历访问或使用item方法进行随机访问节点。(2)常用属性:        Length:返回一个整数,表示某个节点列表中的节点数目。(3)常用方法:        item(index):依据给出的索引值,返回所要的节点。(4)    // 通过getElementsByTagName方法获得元素名为book的所有子节点    NodeList elementNodes = document.getElementsByTagName("book");    // 通过item方法取得列表中第一个节点    Node node = elementNodes.item(0);    // 通过getChildNodes方法得到第一个book节点下所有的子节点    NodeList childnodes =node.getChildNodes();

Element对象

(1)Element对象表示XML文档中的某个元素,继承Node对象的全部属性和方法。(2)常用属性:        tagName:可返回元素的名称。(3)常用方法:    getAttribute():返回某个属性的值。    getAttributeNode():以一个Attribute对象返回一个属性节点。    getElementsByTagName():返回匹配元素节点以及它们的子节点的NodeList。(4)// 通过getElementById方法获取具有指定id属性的元素节点        Element element = document.getElementById(elementId);        //通过一个Node对象转换        NodeList elementNodes = document.getElementsByTagName("book");        Element book = (Element)elementNodes.item(0);        NodeList childnodes = book.getChildNodes();        for (int k = 0; k < childnodes.getLength(); k++) {            Node child = childnodes.item(k);            if (child.getNodeType() == Node.ELEMENT_NODE) {               //通过一个Node对象转换                Element emt = (Element) child;            }        }

Attribute对象

(1)Attribute对象表示元素的属性,它继承了Node接口,但并没有真正实现接口上的方法,比如getFirstNode,childNodes等,调用这些方法将会返回null。(2)常用属性:        name:返回属性的名称。        ownerDocument:返回所属的根元素(document对象)。        ownerElement:返回属性所附属的元素节点。        value:设置或返回属性的值。(3)        // 通过getAttribute方法获取属性bookid的值        String bookId = book.getAttribute (“bookid”);        //通过getAttributeNode方法获取属性节点对象        Attr attrBookId = book.getAttributeNode("bookid ");

Text对象

(1)Text对象表示元素或属性的文本内容。若元素只包含文本,则此文本包含在单个Text对象中,若元素还包含其他的标记,则将它解析到DOMText对象的同级子元素。(2)常用属性:        data:设置或返回元素或属性的文本        length:返回元素或属性的文本长度(3)常用方法:        substringData(start,length):从节点提取数据。(4)        /通过Text对象所属元素节点的getFirstNode方法获取Text对象        Text txt = (Text)elementNode.getFirstNode();        //获取Text对象的文本        String s = txt.getData();        //通过Text对象所属元素节点的getTextContent方法直接获取Text对象的文本        String s= elementNode. getTextContent();

通过DOM读取Xml文档的内容步骤:

1.通过DocumentBulderFoctory创建Xml解释器。
2.通过解释器创建一个可以加载并生成Xml树的DocumentBuilder。
3.通过DocumentBuilder加载并生成一颗Xml树。Document对象的实例。
4.通过Document可以遍历这颗树。并读取相应节点中的内容。

读取XMl文件的方法。

1、将xml文件放在WEB-INF目录下,然后     (1)程序代码:     InputStream is=getServletContext().getResourceAsStream( "/WEB-INF/xmlfile.xml" );       方法二:将xml文件放在/WEB-INF/classes目录下或classpath的jar包中,则可以使用ClassLoader的静态方法getSystemResourceAsStream(String s)读取;    (2)程序代码:     String s_xmlpath="com\xml\hotspot.xml";     InputStream in=ClassLoader.getSystemResourceAsStream(s_xmlpath);     (3)//文件放到web-inf目录下 web-inf/person.xml    String web_inf = getServletContext().getRealPath("/WEB-INF/")+"/person.xml";2、//文件放到src目录下 src/person.xml    String src_inf= getClass().getClassLoader().getResource("person.xml").getPath();    File file = new File(web_inf);    Document document = db.parse(file);