zoukankan      html  css  js  c++  java
  • SAXParser 解析器和 XMLEventReader(读取XML文档)



    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;
    //这个SAXParser只能按顺序进行调用不能返回重复调用函数进行解析,
    public class SAXDemo{
    @Test
    public void demo() throws Exception {
    //1.获得SAXParser的工厂类
    SAXParserFactory factory=SAXParserFactory.newInstance();
    //2.获得SAXParser解析器
    SAXParser parse=factory.newSAXParser();
    //获得XMLReader对象
    XMLReader read=parse.getXMLReader();
    //这里是设置监听,要覆盖原来的函数就按shif+alt+s再按V再从里面进行选择
    read.setContentHandler(new DefaultHandler(){
    private String elementName="";

    @Override
    public void startElement(String uri, String localName,
    String qName, Attributes attributes) throws SAXException {
    if(qName.equals("user")){
    String id=attributes.getValue("id");
    System.out.println("id="+id);
    }
    else if(qName.equals("name")||qName.equals("age")){
    elementName=qName;
    }

    }

    @Override
    public void endElement(String uri, String localName, String qName)
    throws SAXException {
    if(qName.equals("name")||qName.equals("age")){
    elementName="";
    }
    if(qName.equals("user")){
    System.out.println("-------------------------");}

    }

    @Override
    public void characters(char[] ch, int start, int length)
    throws SAXException {
    if(!elementName.equals("")){
    String str=new String(ch,start,length);
    System.out.println(elementName+":"+str);
    }
    }

    });
    read.parse("./xml/users.xml");
    }
    }

    -----------------------------------------------------------------------------------

    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileReader;

    import javax.xml.namespace.QName;
    import javax.xml.stream.XMLEventReader;
    import javax.xml.stream.XMLInputFactory;
    import javax.xml.stream.XMLStreamException;
    import javax.xml.stream.events.Characters;
    import javax.xml.stream.events.StartElement;
    import javax.xml.stream.events.XMLEvent;

    import org.junit.Test;
    import org.xml.sax.XMLReader;


    public class STAdemo {
    @Test
    public void demo() throws Exception {
    XMLInputFactory factory=XMLInputFactory.newInstance();
    XMLEventReader read=factory.createXMLEventReader(new FileReader("./xml/users.xml"));
    //这里跟SAXParser的差别在于XMLEventReader是有迭代器的它可以往上一级访问,而SAX不能只能一次惊醒访问,所以XML比SAX
    //更加方便查询xml;
    while(read.hasNext()){
    XMLEvent en=read.nextEvent();
    if(en.isStartElement()){
    StartElement se=en.asStartElement();
    if(se.getName().getLocalPart().equals("user")){
    String id=se.getAttributeByName(new QName("id")).getValue();
    System.out.println("ID="+id);
    }
    if(se.getName().getLocalPart().equals("name")){
    Characters ch= read.nextEvent().asCharacters();
    System.out.println("Name="+ch.toString());
    }
    if(se.getName().getLocalPart().equals("age")){
    Characters chs=read.nextEvent().asCharacters();
    System.out.println("age="+chs.toString());
    }
    }
    if(en.isEndElement()){
    if(en.asEndElement().getName().getLocalPart().equals("user")){
    System.out.println("-------------------------");
    }
    }
    }

    }

    }

  • 相关阅读:
    vue 进行ajax请求,使用axios
    webpack 小记
    js闭包
    git小记
    sublime text3 插件安装
    mysql安装
    四十九、django单表操作,多表操作,一对多,多对多,分组查询,聚合查询,F、Q查询,自定义char字段,事务,only与defer ,choices字段
    四十八、模板层,标签,过滤器,继承和导入
    四十七、django路由匹配,分组,反向解析,路由分发,视图层
    四十六、django配置及增删改查
  • 原文地址:https://www.cnblogs.com/1314wamm/p/5900016.html
Copyright © 2011-2022 走看看