dom解析xml小结

Xml小结

一、DOM方式解析XML原理

1、定义及优缺点

(1) 定义:DOM= DocumentObject Model,文档对象模型,DOM可以以一种独立于平台和语言的方式访问和修改一个文档的内容和结构。

(2)    DOM的优势主要表现在:易用性强,使用DOM时,将把所有的XML文档信息都存于内存中,并且遍历简单,支持XPath,增强了易用性。

DOM的缺点主要表现在:效率低,解析速度慢,内存占用量过高,对于大文件来说几乎不可能使用。另外效率低还表现在大量的消耗时间,因为使用DOM进行解析时,将为文档的每个element、attribute、processing-instruction和comment都创建一个对象,这样在DOM机制中所运用的大量对象的创建和销毁无疑会影响其效率。

2、实例

package info.lumanman.dom.xml;

 

import javax.xml.parsers.DocumentBuilder;

importjavax.xml.parsers.DocumentBuilderFactory;

importjavax.xml.parsers.ParserConfigurationException;

 

import org.w3c.dom.Document;

import org.w3c.dom.Element;

import org.w3c.dom.NamedNodeMap;

import org.w3c.dom.Node;

import org.w3c.dom.NodeList;

 

public class DomXml {

 

         publicstatic void main(String[] args) {

                   DocumentBuilderFactoryfactory = DocumentBuilderFactory.newInstance();

                   try{

                            DocumentBuilderbuilder = factory.newDocumentBuilder();

                            Documentdoc = builder.parse("src/main/resources/dom.xml");// 加载xml文件

                            NodeListnodeListStudents = doc.getElementsByTagName("students");// 获取所有的students节点

 

                            for(int i = 0; i < nodeListStudents.getLength(); i++) {// 获取每个students节点

                                     Elementelement = (Element) nodeListStudents.item(i);// 如果还有子节点需要把Node对象转为Element

                                     NodeListnodeListStudent = element.getElementsByTagName("student");// 获取每个students中所有的student节点

                                     for(int j = 0; j < nodeListStudent.getLength(); j++) {// 获取每个student节点

                                               Elemente = (Element) nodeListStudent.item(i);// 如果还有子节点需要把Node对象转为Element

                                               System.out.println("姓名:" +e.getElementsByTagName("name").item(0).getFirstChild().getNodeValue());//获取每个student的姓名

                                               getNodeAttr(e.getElementsByTagName("name").item(0));

                                               System.out.println("性别:" +e.getElementsByTagName("sex").item(0).getFirstChild().getNodeValue());//获取每个student的性别

                                               System.out.println("年龄:" +e.getElementsByTagName("age").item(0).getFirstChild().getNodeValue());//获取每个student的年龄

 

                                               System.out.println("----------------------------");

                                     }

                            }

                   }catch (Exception e) {

                            //TODO Auto-generated catch block

                            e.printStackTrace();

                   }

         }

 

         /**

          * 获取每个节点的属性

          *

          * @param node

          */

         publicstatic void getNodeAttr(Node node) {

                   NamedNodeMapnodeMap = node.getAttributes();

                   for(int i = 0; i < nodeMap.getLength(); i++) {// 获取每个节点属性的键值对并遍历

                            Noden = nodeMap.item(i);

                            System.out.println(n.getNodeName()+ ":" + n.getFirstChild().getNodeValue());

                   }

         }

}

 

 

 

<?xml version="1.0"encoding="UTF-8"?>

 

<students>

         <student>

                   <nameid="1" address="张家界">张三</name>

                   <sex>男</sex>

                   <age>18</age>

         </student>

         <student>

                   <nameid="2" address="北京">李四</name>

                   <sex>男</sex>

                   <age>19</age>

         </student>

         <student>

                   <nameid="3" address="上海">王五</name>

                   <sex>女</sex>

                   <age>20</age>

         </student>

</students>

展开阅读全文

没有更多推荐了,返回首页