XML编程总结——java使用StAX接口操作xml(进一步理解说明)

基于上一篇博客的进一步理解说明一下(上一篇博客地址:https://blog.csdn.net/HD243608836/article/details/87571886

废话不多说,直接上代码了。(代码真的没有几行,主要是用来“理解说明的注释”占据了大量篇幅)

students.xml文件

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<students>
    <student id="000">
        <name>zhangsan22</name>
        <gender>female</gender>
        <age>26</age>
    </student>
    <student id="002">
        <name>lisi</name>
        <gender>male</gender>
        <age>24</age>
    </student>
    <student id="003">
        <name>xiaoqiao</name>
        <gender>female</gender>
        <age>18</age>
    </student>
    <student id="004">
        <name>diaochan</name>
        <gender>female</gender>
        <age>23</age>
    </student>
</students>

parserXml.java文件

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;

import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamConstants;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;

public class parserXml {

    private InputStream is;
    
    public parserXml() throws FileNotFoundException{
        File xmlFile = new File("src/main/resources/usedByUtils/students.xml");
        is = new FileInputStream(xmlFile);
    }
    
    /**
     * 指针读取xml
     * @throws XMLStreamException 
     */
    public void readXmlByCursor() throws XMLStreamException{
        
        XMLInputFactory factory = XMLInputFactory.newInstance();
        XMLStreamReader streamReader=factory.createXMLStreamReader(is);
        
        while(streamReader.hasNext()) {
            System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
            
            //1.调用getEventType()返回的eventType:是当前节点事件类型
            //  int eventType=streamReader.getEventType();
            //2.调用next()返回的eventType:“指针”走到下一个节点,然后返回下一个节点对应的事件
            //  “streamReader实例”每次循环都不一样(可以debugger看一下它的属性值),所以不同的streamReader“能调用的”方法也不同。
            int eventType=streamReader.next();
            
            //System.out.println("执行next()后,LineNumber指针位置的行号: "+streamReader.getLocation().getLineNumber());
            //System.out.println("eventType事件类型: "+eventType);
            switch(eventType) {
            //START_DOCUMENT 可以不写,开发时候一般用不到
            case XMLStreamConstants.START_DOCUMENT:
                //System.out.println("start document");
                break;
            case XMLStreamConstants.START_ELEMENT:
                //获得当前的标签名
                System.out.println("<"+streamReader.getLocalName()+">"); 
                for(int i=0;i<streamReader.getAttributeCount();i++){  
                    //获得当前的标签对应的“属性名+属性值”
                    System.out.println(streamReader.getAttributeLocalName(i)+"="+streamReader.getAttributeValue(i));  
                }
                break;
            case XMLStreamConstants.CHARACTERS:
                //理解:第一遍CHARACTERS事件,返回的“空白”应该是<students>与<student id="000">之间的“换行”与“四个空格或Tab”
                System.out.println( "【"+streamReader.getText()+"】");
                
                //开发时候一般用下面这几行来跳过“空白”
                //if(streamReader.isWhiteSpace()){  
                //    break;  
                //}  
                //System.out.println(streamReader.getText());  
                
                break;
            case XMLStreamConstants.END_ELEMENT:
                System.out.println("</"+streamReader.getLocalName()+">"); 
                break;
            //END_DOCUMENT 可以不写,开发时候一般用不到
            case XMLStreamConstants.END_DOCUMENT:
                //System.out.println("end document");
                break;
            default:
                break;
            }
        }
        
    }
    /**
     * 指针写入xml
     */
    public void writeXmlByCursor(){
        
    }
    /**
     * 迭代器读取xml
     */
    public void readXmlByIterator(){
        
    }
    /**
     * 迭代器写入xml
     */
    public void writeXmlByIterator(){
        
    }

    public static void main(String[] args) {
        try {
            new parserXml().readXmlByCursor();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

执行readXmlByCursor()方法返回“控制台”打印结果:

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
<students>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
【
    】
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
<student>
id=000
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
【
        】
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
<name>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
【zhangsan22】
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
</name>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
【
        】
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
<gender>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
【female】
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
</gender>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
【
        】
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
<age>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
【26】
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
</age>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
【
    】
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
</student>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
【
    】
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
<student>
id=002
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
【
        】
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
<name>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
【lisi】
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
</name>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
【
        】
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
<gender>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
【male】
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
</gender>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
【
        】
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
<age>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
【24】
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
</age>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
【
    】
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
</student>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
【
    】
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
<student>
id=003
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
【
        】
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
<name>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
【xiaoqiao】
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
</name>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
【
        】
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
<gender>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
【female】
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
</gender>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
【
        】
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
<age>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
【18】
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
</age>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
【
    】
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
</student>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
【
    】
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
<student>
id=004
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
【
        】
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
<name>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
【diaochan】
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
</name>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
【
        】
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
<gender>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
【female】
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
</gender>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
【
        】
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
<age>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
【23】
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
</age>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
【
    】
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
</student>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
【
】
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
</students>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

以上,对于需要开发读取XML文件的小白们够用了!!

觉得有用的点个赞哈!

其它几个方法的详解有空再写,未完待续……

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值