zoukankan      html  css  js  c++  java
  • Java 操作XML[方式二] (org.xml.sax)

    • SAX
      • SimpleAPI for XML
      • 采用事件/流模型来解析XML文档, 更快速, 更轻量
      • 有选择解析和访问, 不像DOM加载整个文档, 内存要求低
      • SAX 对 XML 文档的解析为一次性读取, 不创建/存储文档对象, 很难同时访问xml文档中多处数据
      • 推模型. 当它每发现一个节点就引发一个事件, 而我们需要编写这些事件的处理程序.
    package hello;
    
    import org.xml.sax.Attributes;
    import org.xml.sax.SAXException;
    import org.xml.sax.XMLReader;
    import org.xml.sax.helpers.DefaultHandler;
    import org.xml.sax.helpers.XMLReaderFactory;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class XML_SAXReader {
        public static void main(String[] args) {
            try {
                XMLReader parser = XMLReaderFactory.createXMLReader();
                UserHandler userHandler = new UserHandler();
                parser.setContentHandler(userHandler);
                parser.parse("users.xml");
                System.out.println(userHandler.getNameList());
    
            } catch (Exception e) {
                e.printStackTrace();
            }
    
        }
    
        static class UserHandler extends DefaultHandler {
            private List<String> nameList;
            private boolean isName = false;
    
            public List<String> getNameList() {
                return nameList;
            }
    
            public void startDocument() throws SAXException {
                System.out.println("开始解析文档...");
                this.nameList = new ArrayList<String>();
            }
    
            // xml 文档解析结束
            public void endDocument() throws SAXException {
                System.out.println("...文档解析完毕");
            }
    
            // 访问某一个元素
            public void startElement(String uri, String localName, String qName, Attributes atts) throws SAXException {
                System.out.println("开始读取标签 " + qName);
                if (qName.equals("name")) {
                    isName = true;
                }
            }
    
            // 结束访问元素
            public void endElement(String namespaceURI, String localName, String qName) throws SAXException {
                System.out.println("结束读取标签 " + qName);
                if (isName) {
                    isName = false;
                }
            }
    
            // 访问元素正文
            public void characters(char[] ch, int start, int length) {
                if (isName) {
                    String name = new String(ch, start, length);
                    System.out.println("userName: " + name);
                    nameList.add(name);
                }
            }
    
        }
    }
    
    <?xml version="1.0" encoding="UTF-8"?>
    <users>
        <user id="001">
            <name>Mary</name>
            <age>3</age>
            <sex>Female</sex>
        </user>
        <user id="002">
            <name>Mike</name>
            <age>18</age>
            <sex>Male</sex>
        </user>
        <user id="003">
            <name>ZhaZhaHui</name>
            <age>38</age>
            <sex>Male</sex>
        </user>
    </users>
    
  • 相关阅读:
    Sam小结和模板
    K-string HDU
    str2int HDU
    Common Substrings POJ
    Reincarnation HDU
    实体框架自动迁移出现异常。
    C#代码配置IIS 操纵IIS
    MVC项目页面获取控制器的信息
    通过js判断手机访问跳转到手机站
    "Could not load file or assembly 'DTcms.Web.UI' or one of its dependencies. 拒绝访问。" 的解决办法
  • 原文地址:https://www.cnblogs.com/sweetXiaoma/p/12653588.html
Copyright © 2011-2022 走看看