Java学习之Xml系列五:SAX解析——搜索xml内容

本文对SAX解析进一步说明。

另外主要给利用SAX解析方法找到指定条件(如标签名称)的xml文档内容。

首先按需要介绍一下DefaultHandler。

DefaultHandler类是SAX2事件处理程序的默认基类。它继承了EntityResolver、DTDHandler、ContentHandler和ErrorHandler这四个接口。包含这四个接口的所有方法,所以我们在编写事件处理程序时,可以不用直接实现这四个接口,而继承该类,然后重写我们需要的方法。(注意:ContentHandler是个接口,所以所有的方法的都必须重写;而DefaultHandler是一个实现了ContentHandler的类,所以可以根据选择实现方法)

org.xml.sax.helpers
类 DefaultHandler
java.lang.Object
 继承者 org.xml.sax.helpers.DefaultHandler
所有已实现的接口:
   ContentHandler, DTDHandler, EntityResolver, ErrorHandler
直接已知子类:
   DefaultHandler2

xml文档:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE SwordLibrary SYSTEM "SwordTypeDefinition.dtd">
<SwordLibrary>
<Sword sno="s1">
<SwordName>欢欣之刃</SwordName>
<Price>1000</Price>
<Attack factor="1.0">10</Attack>
</Sword>
<Sword sno="s2">
<SwordName>夜叉</SwordName>
<Price>2050</Price>
<Attack factor="2.0">30</Attack>
</Sword>
<Sword sno="s3">
<SwordName>魔棒</SwordName>
<Price type="Dollar">200</Price>
<Attack factor="1.0">0</Attack>
</Sword>
</SwordLibrary>

java代码:

ackage com.shu;

import java.io.IOException;

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

import org.junit.Test;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler;

public class XmlDemo5 {

    @Test
    public void TestMain() throws ParserConfigurationException, SAXException,
            IOException {
        // 1.创建解析工厂
        SAXParserFactory factory = SAXParserFactory.newInstance();

        // 2.得到SAX解析器
        SAXParser sax = factory.newSAXParser();

        // 3.得到读取器
        XMLReader reader = sax.getXMLReader();

        // 4.设置内容处理器(即事件处理器:SAX解析器获取一部分内容即触发某一个事件,相应的事件解析器完成相应处理)
        reader.setContentHandler(new SwordSearchHandler());

        // 5.读取xml文档内容
        reader.parse("src/JavaLeaner/XmlTest/SwordLib.xml");
    }
}

// 注意DefaultHandler是个类
// DefaultHandler类是SAX2事件处理程序的默认基类。它继承了EntityResolver、DTDHandler、ContentHandler和ErrorHandler这四个接口。包含这四个接口的所有方法,所以我们在编写事件处理程序时,可以不用直接实现这四个接口,而继承该类,然后重写我们需要的方法。
class SwordSearchHandler extends DefaultHandler {

    //标记当前处理的标签Element名称
    String tagCurrent;
    //设置所要找的剑
    String searching="夜叉";
    //定位所要找的剑,作为标记
    boolean found=false;

    @Override
    public void startElement(String uri, String localName, String qName,
            Attributes attributes) throws SAXException {

        this.tagCurrent = qName;

    }

    @Override
    public void characters(char[] ch, int start, int length)
            throws SAXException {

        if ("SwordName".equals(this.tagCurrent)) {
            String valueName = new String(ch, start, length);
            if(searching.equals(valueName))
            {
                this.found=true;
            }
        }
        
        if (this.found && "Price".equals(this.tagCurrent))
        {
            System.out.print(this.searching+"的价钱是:"+new String(ch, start, length));
            //标记关闭
            this.found=false;
        }

    }

    @Override
    public void endElement(String uri, String localName, String qName)
            throws SAXException {
        //标签结束
        this.tagCurrent = null;

    }

}

结果运行:

夜叉的价钱是:2050

Java学习之Xml系列五:SAX解析——搜索xml内容

时间: 2024-10-07 04:50:33

Java学习之Xml系列五:SAX解析——搜索xml内容的相关文章

Java SE之XML&lt;二&gt;XML DOM与SAX解析

[文档整理系列] Java SE之XML<二>XML DOM与SAX解析 XML编程:CRUD(Create Read Update Delete) XML解析的两种常见方式: DOM(Document Object Model): 特点:树状解析 优点:[更适合对XML文档的(crud)操作.]对XML文档增删改查操作很方便灵活 缺点:内存消耗很大,不适合数据量很大,节点很多的XML文档. SAX(Simple API for XML): 特点:自上往下顺序解析 优点:[占用内存小,解析速度

Java xml 操作(Dom4J修改xml &#160;&#160;+ xPath技术 &#160;+ SAX解析 + XML约束)

1 XML基础 1)XML的作用 1.1 作为软件配置文件 1.2 作为小型的"数据库" 2)XML语法(由w3c组织规定的) 标签: 标签名不能以数字开头,中间不能有空格,区分大小写.有且仅有一个根标签. 属性: 可有多个属性,但属性值必须用引号(单引号或双引号)包含,但不能省略,也不能单 双混用. 文档声明: <?xml version="1.0" encoding="utf-8"?> encoding="utf-8&q

XML系列:(3)XML解析

xml文件除了给开发者看,更多的情况使用程序读取xml文件的内容,这叫做xml解析. 1.XML解析方式和工具 1.1.XML解析方式 XML解析分为两种方式:DOM和SAX. DOM:W3C组织推荐的一种解析方式.xml解析器一次性把整个xml文档加载进内存,然后在内存中构建一颗Document的对象树,通过Document对象,得到树上的节点对象,通过节点对象访问(操作)到xml文档的内容.缺点: 不适合读取大容量的xml文件,容易导致内存溢出. SAX:(Simple API for XM

XML.03-DOM和SAX解析

body,td { font-family: calibri; font-size: 10pt } XML.03-DOM和SAX解析 XML的DOM解析 解析 处理 回写 XML的SAX解析 SAX和DOM方式的不同: SAX解析原理 SAX解析范例 解析xml常用的有两种方式,DMO和SAX DOM和SAX的区别: DOM: 在内存中生成树桩结构 优点是可以支持增删改查各种操作 缺点在于,如果文档过大的时候,可能会产生内存溢出的风险 SAX: 基于事件驱动,边读边解析 优点:占用内存小 缺点,

Sharepoint学习笔记—习题系列--70-576习题解析 --索引目录

    Sharepoint学习笔记—习题系列--70-576习题解析  为便于查阅,这里整理并列出了70-576习题解析系列的所有问题,有些内容可能会在以后更新. 需要事先申明的是:     1. 不要把本系列当成Sharepoint 70-576的应试题库. 2.  Sharepoint学习 不是以考证为目的,真正的掌握是要通过大量实践来达到. 3.  通过做练习,可 以帮助我们加深对Sharepoint相关知识点的认知与掌握,不失为一个复习与整理Sharepoint知识的好方法. 4. 

XML系列:(4)XML解析-JAXP的DOM解析方式读取XML

DOM.SAX和StAX只是解析方式,没有API. JAXP是SUN提供的一套XML解析API.    JAXP(Java API for XMLProcessing,意为XML处理的Java API) JAXP很好的支持DOM和SAX解析. JAXP开发包是JAVASE的一部分,它由java.xml.org.w3c.dom.org.xml.sax包及其子包组成 products.mxl <?xml version="1.0" encoding="UTF-8"

XML系列:(5)XML解析-JAXP的DOM解析方式修改XML

DOM.SAX和StAX只是解析方式,没有API. JAXP是SUN提供的一套XML解析API.JAXP(Java API for XMLProcessing,意为XML处理的Java API) JAXP很好的支持DOM和SAX解析. JAXP开发包是JAVASE的一部分,它由java.xml.org.w3c.dom.org.xml.sax包及其子包组成 1.以DOM解析方式修改XML 1.1.将Document树保存到文件中 package com.rk.xml.e_jaxp_dom_writ

Deep Learning(深度学习)学习笔记整理系列五

Deep Learning(深度学习)学习笔记整理系列 声明: 1)该Deep Learning的学习系列是整理自网上很大牛和机器学习专家所无私奉献的资料的.具体引用的资料请看参考文献.具体的版本声明也参考原文献. 2)本文仅供学术交流,非商用.所以每一部分具体的参考资料并没有详细对应.如果某部分不小心侵犯了大家的利益,还望海涵,并联系博主删除. 3)本人才疏学浅,整理总结的时候难免出错,还望各位前辈不吝指正,谢谢. 4)阅读本文需要机器学习.计算机视觉.神经网络等等基础(如果没有也没关系了,没

XML系列:(7)XML解析-Dom4j的DOM解析方式更新XML

Dom4j工具,是非官方的,不在jdk中. 使用步骤: 1)导入dom4j的核心包. dom4j-1.6.1.jar 2)编写Dom4j读取xml文件的代码 1.更新XML 1.1.写出内容到xml文档 package com.rk.xml.g_dom4j_write; import java.io.File; import java.io.FileOutputStream; import org.dom4j.Document; import org.dom4j.io.SAXReader; im