XML文件解析DOM解析和SAX解析

解析一个XML文档有哪些内容
解析有:dom和sax两种
dom:把整个XML文档放入内存,适合XML随机访问,占用内存资源大
sax:事件驱动型的XML解析方式,顺序读取,不用一次装载整个文件,遇到标签会触发一个事件,适合对XML的顺序访问,占用内存资源稍小

Node:
  XML 文档的 documentElement 属性是根节点。
  nodeName 属性是节点的名称。nodeName 是只读的
  元素节点的 nodeName 与标签名相同
  属性节点的 nodeName 是属性的名称
  文本节点的 nodeName 永远是 #text
  文档节点的 nodeName 永远是 #document

  nodeType 属性是节点的类型。
  元素类型 节点类型
    元素 1
    属性 2
    文本 3
    注释 8
    文档 9

nodeValue属性规定节点的值。
元素节点的 nodeValue 是 undefined
文本节点的 nodeValue 是文本自身
属性节点的 nodeValue 是属性的值

DOM解析:

package com.briup.test3;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

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;
//用递归DOM方法解析
public class DomBookTest {
    //获取解析器 将其封装
    public static Document getDoc(String filename) throws Exception{
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = factory.newDocumentBuilder();
        return builder.parse(filename);
    }

    public static void main(String[] args) throws Exception {
        //获取解析地址
        Document doc = getDoc("src/com/briup/test3/book.xml");
        //输出头部
        System.out.println("<? version="+doc.getXmlVersion()+" encoding="+doc.getXmlEncoding()+">");
        //获取根节点
        Element element = doc.getDocumentElement();
        printdoc(element);

    }
    public static void  printdoc(Node n){
        //获取节点类型
        short type = n.getNodeType();
        if (type==1) {
        //获取节点内容
            System.out.print("<"+n.getNodeName()+" ");
        //用Map集合存储获取的节点属性
            NamedNodeMap map = n.getAttributes();
            for (int i = 0; i < map.getLength(); i++) {
                Node attr =map.item(i);
                System.out.print(attr.getNodeName()+"="+attr.getNodeValue());
            }
            System.out.print(">");
        //获取孩子节点
            NodeList list = n.getChildNodes();
            for (int i = 0; i < list.getLength(); i++) {
            Node child = list.item(i);
            printdoc(child);
            }
            System.out.print("</"+n.getNodeName()+">");

        }    //获取节点内容
            else if(type ==3){
            System.err.print(n.getNodeValue());

        }

    }

}

SAX解析:

  

package com.briup.test3;

import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.Attributes;

import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

public class SaxBookTest {

    public static void main(String[] args) throws Exception{
        //获取解析器
        SAXParserFactory factory = SAXParserFactory.newInstance();
        SAXParser parser = factory.newSAXParser();
        //使用内部类解析文件
        parser.parse("src/com/briup/test3/book.xml", new DefaultHandler(){

            //解析开始标题文档
            public void startDocument() throws SAXException {
                System.out.println("<?xml version= 1.0 encoding= utf-8 ?>");

            }

            //解析节点
            @Override
            public void startElement(String uri, String localName,
                    String qName, Attributes attributes) throws SAXException {
                System.out.print("<"+qName+" ");
                for (int i = 0; i < attributes.getLength(); i++) {
                    System.out.print(attributes.getQName(i)+"="+attributes.getValue(i));

                }
                System.out.print(">");
            }

            @Override
            //解析结束
            public void endElement(String uri, String localName, String qName)
                    throws SAXException {
                System.out.print("</"+qName+">");
            }

            @Override
            //解析内容
            public void characters(char[] ch, int start, int length)
                    throws SAXException {
                String string = new String(ch, start, length);
                System.out.print(string);
            }

        });
    }

}

BOOK的XML文档

<?xml version="1.0" encoding="utf-8"?>
<books>
    <book bid="1">
        <name>java与模式</name>
        <price>80</price>
    </book>
    <book bid="2">
        <name>java编程思想</name>
        <price>95</price>
    </book>
    <book bid="3">
        <name>疯狂java讲义</name>
        <price>90</price>
    </book>
</books>
时间: 2024-10-18 15:03:39

XML文件解析DOM解析和SAX解析的相关文章

解析XML文件的两种方式 SAX和DOM

1.数据解析 解析的基本概念 所谓“解析”:从事先规定好的格式中提取数据 解析的前提:提前约定好格式,数据提供方按照格式提供数据.数据获取方则按照格式获取数据 iOS开发常见的解析:XML解析.JSON解析 2.XML数据结构 XML:Extensible Markup language(可扩展标记语言),主流数据格式之一,可以用来存储和传输数据. XML数据格式的功能 数据交换 内容管理 用作配置文件 XML数据结构的语法 声明 节点使用一对标签表示:起始和结束标签. 根节点是起始节点,只有一

UI进阶 解析XML文件的两种方式 SAX和DOM

1.数据解析 解析的基本概念 所谓“解析”:从事先规定好的格式中提取数据 解析的前提:提前约定好格式,数据提供方按照格式提供数据.数据获取方则按照格式获取数据 iOS开发常见的解析:XML解析.JSON解析 2.XML数据结构 XML:Extensible Markup language(可扩展标记语言),主流数据格式之一,可以用来存储和传输数据. XML数据格式的功能 数据交换 内容管理 用作配置文件 XML数据结构的语法 声明 节点使用一对标签表示:起始和结束标签. 根节点是起始节点,只有一

【Android高级】XMl文件的DOM、SAX、PULL三种解析方式全解

本来一直忙着期末考试的复习,但复习挺无聊的,偶然看到xml的解析方法,虽然以前做过,但感觉不是很熟悉了,所以抽点时间一口气把三种方式都复习了遍.这三种方法中DOM最耗内存,因为它是把整个文件加载进去然后进行分类整理的,PULL和SAX类似,只是SAX要用到一个解析类,类中的主要三个方法完成内容的解析,而PULL方法是Android特有的,根据获得的标签判断并解析,这也是安卓中最常使用的方法. 接下来给大家复习下,因为我觉得看代码更容易明白,讲解的就不多了. 首先我们准备好我们要解析的资源文件和封

Android程序解析XML文件的方法及使用PULL解析XML案例

一.一般解析XML文件的方法有SAX和DOM.PULL (1)DOM(JAXP Crimson解析器) DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准.DOM是以层次结构组织的节点或信息片断的集合.这个层次结构允许开发人员在树中寻找特定信息.分析该结构通常需要加载整个文档和构造层次结构,然后才能做任何工作.由于它是基于信息层次的,因而DOM被认为是基于树或基于对象的.DOM 以及广义的基于树的处理具有几个优点.首先,由于树在内存中是持久的,因此可以修改它以便应用程序能对数据和结构

Android 之XML数据解析(2)—— SAX解析

(以下文章基本照抄郭霖大神的<第一行代码>) 在Android之 解析XML文件(1)-- Pull解析 中我们讲了Pull方式解析XML文件.今天讲另外一种方式,SAX解析XML文件. 首先还是先看代码. 一. SAX解析参考代码 private void parseXMLWithSAX(String xmlData){ try{ SAXParserFactory factory = SAXParserFactory.newInstance(); XMLReader xmlReader =

C#关于xml文件和TreeView之间的转换解析

public partial class ParseXmlFilesForm : Form { public static WirelessCharge celfras = new WirelessCharge(); public static StreamWriter logSW = null; public static FileStream logFS = null; #region 变量声明 private string xmlFilePath; private string rootN

XML学习笔记(二):使用 DOM和SAX 解析XML :

一.XML解析的简介 1.一般来说xml解析的方式有两种,Dom与SAX,且各有优缺点.pull是第三种方法见:pull解析XML 1)DOM:dom对象树 ①.整个XML放入内存,转换为Document对象: ②.每个元素,转换成Element对象 ③.文本,转换成Text对象 ④.属性,转换成Attribute对象 优缺点:元素的CRUD比较简单,但是内存消耗大,大的xml文档不适合. 补充:内存不足时,可以修改参数,调整JVM的内存大小 1.java.lang.OutOfMemoryErr

DOM解析XML文件

除了可以使用SAX解析XML文件,大家也可以使用熟悉的DOM来解析XML文件. DOM解析XML文件时,会将XML文件的所有内容读取到内存中,然后允许您使用DOMAPI遍历XML树.检索所需的数据.使用DOM操作XML的代码看起来比较直观,并且,在某些方面比基于SAX的实现更加简单.但是,因为DOM需要将XML文件的所有内容读取到内存中,所以内存的消耗比较大,特别对于运行Android的移动设备来说,因为设备的资源比较宝贵,所以建议还是采用SAX来解析XML文件,当然,如果XML文件的内容比较小

DOM和SAX解析XML的区别

解析xml有四种方法:DOM,SAX,DOM4j,JDOM.     我们主要学了两种:DOM和SAX.     DOM适于解析比较简单的XML而SAX则适于解析较复杂的XML文件.各有各的好. DOM和SAX的不同:     1. DOM是基于内存的,不管文件有多大,都会将所有的内容预先装载到内存中.从而消耗很大的内存空间.而SAX是基于事件的.当某个事件被触发时,才获取相应的XML的部分数据,从而不管XML文件有多大,都只占用了少量的内存空间.     2. DOM可以读取XML也可以向XM

XML文件解析【安卓7】——SAX解析

XML文件解析 XML解析:XML技术是Android平台的应用基础,  Android提供了多种解析XML的方式:SAX解析.DOM解析.PULL解析 SAX解析 SAX --Simple  API  forXML  (XML简单的API) --解析速度快.占用内存少 --提供一组简单的API用于解析XML文件 --SAX在解析XML文件前,先指定一个解析事件处理器(Handler),SAX会对XML文档进行简单的顺序扫描,当扫描到[文档(Document)的开始和结束.元素(Element)