Java解析XML

解析XML

这里使用Sax解析xml文件。
我们可以重写一下DefaultHandler
xml 解析练习

  • 1, 获取解析工厂。
  • 2, 从解析工厂获取解析器。
  • 3, 编写处理器
  • 4, 加载文档 注册处理器。
import org.xml.sax.SAXException;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import java.io.IOException;

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

/**
 * xml 解析练习
 * 1, 获取解析工厂。
 * 2, 从解析工厂获取解析器。
 * 3, 编写处理器
 * 4, 加载文档 注册处理器。
 */

public class SaxText {
    public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {
        // 1, 获取解析工厂。
        SAXParserFactory factory = SAXParserFactory.newInstance();
        // 2, 从解析工厂获取解析器。
        SAXParser parser = factory.newSAXParser();

        // 3, 编写处理器。

        // 4, 加载文档 注册处理器。
        // 重写一下 DefaultHandler就行了。

        DefaultHandler handler = new PHandler();
        // 5, 从当前类加载器中获取,
        parser.parse(Thread.currentThread().getContextClassLoader().getResourceAsStream("123.xml"), handler);


    }
}

class PHandler extends DefaultHandler{

    @Override
    public void startDocument() throws SAXException {
        super.startDocument();
        //接收文件开头的通知。
        System.out.println("---文件加载从这里开始---");
    }

    @Override
    public void endDocument() throws SAXException {
        super.endDocument();
        //接受文件结尾通知。
        System.out.println("----文件加载这里结束");
    }

    @Override
    public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
        super.startElement(uri, localName, qName, attributes);
        // 接收元素开始通知。
        System.out.println("---接受元素开始通知---");

    }

    @Override
    public void endElement(String uri, String localName, String qName) throws SAXException {
        super.endElement(uri, localName, qName);
        // 接受元素结尾通知。
        System.out.println("---接受元素结尾通知---");
    }

    @Override
    public void characters(char[] ch, int start, int length) throws SAXException {
        super.characters(ch, start, length);
        // 接收元素内的字符数据通知。

        String contents = new String(ch,start,length).trim();
        if(contents.length()>0) {
            System.out.println("内容为->"+contents);
        }else {
            System.out.println("内容为->"+"空");
        }
    }
}

喜欢的话,给博主赏一杯冰阔乐吧


  转载请注明: Maserhe Java解析XML

 上一篇
脚本引擎执行Javascript代码报错解决。 脚本引擎执行Javascript代码报错解决。
报错信息:Exception in thread “main” javax.script.ScriptException: ReferenceError: “importPackage” is not defined in at line
2020-10-19
下一篇 
数组的度 数组的度
leetcode 697.数组的度题目: 传送门 一看题很水就想直接暴力。哎~ 我错了。 开始想着排序。找到最大的度对应的值,然后双指针从两边开始搜。找到相应的值左右两边相减就能得到答案了。 太天真了。其实最大度对应的值可能不止一对。当发现
2020-09-28
  目录