• 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("-------------------------");
    }
    }
    }

    }

    }

  • 相关阅读:
    高级软件工程第四次作业(C++)
    248&258--高级软件工程第三次作业
    高级软件工程第二次作业--四则运算生成器
    2017282110258--高级软件工程--齐爽爽第一次作业
    一元多项式求导_9
    成绩排名_8
    写这个数 _7
    我要通过_6
    月饼_5
    Hadoop的读写类调用关系_图示
  • 原文地址:https://www.cnblogs.com/1314wamm/p/5900016.html
Copyright © 2020-2023  润新知