java解析xml文件-DOM/SAX

Posted on 2020-11-20 14:06  写程序到老  阅读(196)  评论(0)    收藏  举报

java解析xml文件的两种方式

1:DOM

原理:把整个文档加载到内存,转化成dom树,之后应用程序可以随机的访问dom树的任何数据,灵活 快,但消耗内存

一个简单的xml

 

 使用java解析

//builder工厂
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        try {
            //builder
            DocumentBuilder builder = factory.newDocumentBuilder();
            //解析xml文档
            Document doc = builder.parse("src/xmls/demo.xml");
            //根据标签名得到元素
            NodeList list = doc.getElementsByTagName("student");
            //因为只有一个student 所以获取第一个
//          Node node=list.item(0);
            //element继承自node
            Element student = (Element) list.item(0);//第一个元素
            //姓名
            Element name = (Element) student.getElementsByTagName("姓名").item(0);
            String nameValue = name.getFirstChild().getNodeValue();
            //年龄
            Element age = (Element) student.getElementsByTagName("age").item(0);
            String ageValue = age.getFirstChild().getNodeValue();
            System.out.println(ageValue);
            //性别
            Element sex = (Element) student.getElementsByTagName("sex").item(0);
            String sexValue = sex.getFirstChild().getNodeValue();
            String attib = sex.getAttribute("id");
            System.out.println(sexValue);
            System.out.println(attib);
        } catch (Exception e) {
            e.printStackTrace();
        }

节点 属性 文本 都可以拿到了,复杂的xml也是使用这么几个方法。

2. sax

只能read 不能edit 相对于DOM方式来说 不会占用太多的内存, 对xml文档进行顺序扫描,有事件发生  

输出结果:

 

 

public class SaxDemo extends DefaultHandler {
    @Override
    public void startDocument() throws SAXException {
        System.out.println("文档开始。。。");
    }

    @Override
    public void endDocument() throws SAXException {
        System.out.println("文档结束。。。");
    }

    @Override
    public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
        System.out.println("元素开始。。"+qName);
    }

    @Override
    public void endElement(String uri, String localName, String qName) throws SAXException {
        System.out.println("元素结束。。。"+qName);
    }

    /**
     * 文本结点
     * @param ch
     * @param start
     * @param length
     * @throws SAXException
     */
    @Override
    public void characters(char[] ch, int start, int length) throws SAXException {
    System.out.println(new String(ch,start,length));
    }

    public static void main(String[] args) {
        SAXParserFactory factory =SAXParserFactory.newInstance();
        SAXParser parser= null;
        try {
            parser = factory.newSAXParser();
            try {
                parser.parse("src/xmls/demo.xml",new SaxDemo());
            } catch (IOException e) {
                e.printStackTrace();
            }
        } catch (ParserConfigurationException e) {
            e.printStackTrace();
        } catch (SAXException e) {
            e.printStackTrace();
        }

    }

博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3