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


转载于:https://my.oschina.net/happyBKs/blog/297971

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Java中使用SAX解析XML,你可以按照以下步骤进行操作: 1. 导入相关的类和包,如`javax.xml.parsers.SAXParser`和`javax.xml.parsers.SAXParserFactory`。 2. 创建`SAXParserFactory`的实例。 3. 通过调用`SAXParserFactory`的`newSAXParser()`方法创建一个解析器。 4. 获取需要解析XML文档,并创建一个`File`对象来表示该文档。 5. 创建一个自定义的`SAXHandler`类,该类继承自`DefaultHandler`类,并重写需要的回调方法来处理XML元素和数据。 6. 调用解析器的`parse()`方法,传入文件和自定义的`SAXHandler`对象作为参数,开始解析XML文档。 你可以参考以下示例代码: ```java import java.io.File; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; public class TestDemo { public static void main(String[] args) throws Exception { // 1.实例化SAXParserFactory对象 SAXParserFactory factory = SAXParserFactory.newInstance(); // 2.创建解析SAXParser parser = factory.newSAXParser(); // 3.获取需要解析的文档,生成解析器,最后解析文档 File f = new File("books.xml"); SaxHandler dh = new SaxHandler(); parser.parse(f, dh); } } ``` 请注意,上述代码中的`SaxHandler`是一个自定义的类,你需要根据自己的需求来实现该类,以便在解析XML时处理相应的元素和数据。 XML文档如下所示: ```xml <?xml version="1.0" encoding="UTF-8"?> <books> <book id="001"> <title>Harry Potter</title> <author>J K. Rowling</author> </book> <book id="002"> <title>Learning XML</title> <author>Erik T. Ray</author> </book> </books> ``` 希望以上信息能够帮到你。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [java中使用sax解析xml的解决方法](https://download.csdn.net/download/weixin_38747216/12815749)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [在java中使用sax解析xml](https://blog.csdn.net/weixin_33884611/article/details/86303531)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值