gongqi198891 2015-03-10 08:44
浏览 650

求助SAX解析XML时为什么不加上stack.pop()无法打印出元素文本内容?

package com.shengsiyuan.xml.sax;

import java.io.File;
import java.util.Stack;

import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

public class SaxTest2
{
public static void main(String[] args) throws Exception
{
SAXParserFactory factory = SAXParserFactory.newInstance();

    SAXParser parser = factory.newSAXParser();

    parser.parse(new File("student.xml"), new MyHandler2());
}

}

class MyHandler2 extends DefaultHandler
{
private Stack stack = new Stack();

private String name;

private String gender;

private String age;

@Override
public void startElement(String uri, String localName, String qName,
        Attributes attributes) throws SAXException
{
    stack.push(qName);

    for(int i = 0; i < attributes.getLength(); i++)
    {
        String attrName = attributes.getQName(i);
        String attrValue = attributes.getValue(i);

        System.out.println(attrName + "=" + attrValue);
    }
}

@Override
public void characters(char[] ch, int start, int length)
        throws SAXException
{
    String tag = stack.peek();

    if("姓名".equals(tag))
    {
        name = new String(ch, start,length);
    }
    else if("性别".equals(tag))
    {
        gender = new String(ch, start, length);
    }
    else if("年龄".equals(tag))
    {
        age = new String(ch, start, length);
    }
}

@Override
public void endElement(String uri, String localName, String qName)
        throws SAXException
{
    //stack.pop(); 

    if("学生".equals(qName))
    {
        System.out.println("姓名:" + name);
        System.out.println("性别:" + gender);
        System.out.println("年龄:" + age);

        System.out.println();
    }

}

}

不加stack.pop()程序运行结果如下,而加上就可以把元素里的文本打印出来,实在想不明白为什么要加上stack.pop()代码,把堆栈里的东西每次读到元素末尾就清空,求高手解答

//运行结果
学号=1
姓名:

性别:

年龄:

//XML文档如下

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<学生名册>
<学生 学号="1">
<姓名>张三</姓名>
<性别>男</性别>
<年龄>20</年龄>
</学生>
</学生名册>

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
    • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
    • ¥20 有关区间dp的问题求解
    • ¥15 多电路系统共用电源的串扰问题
    • ¥15 slam rangenet++配置
    • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
    • ¥15 ubuntu子系统密码忘记
    • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
    • ¥15 保护模式-系统加载-段寄存器
    • ¥15 电脑桌面设定一个区域禁止鼠标操作