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 孟德尔随机化结果不一致
    • ¥15 apm2.8飞控罗盘bad health,加速度计校准失败
    • ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
    • ¥15 谁有desed数据集呀
    • ¥20 手写数字识别运行c仿真时,程序报错错误代码sim211-100
    • ¥15 关于#hadoop#的问题
    • ¥15 (标签-Python|关键词-socket)
    • ¥15 keil里为什么main.c定义的函数在it.c调用不了
    • ¥50 切换TabTip键盘的输入法
    • ¥15 可否在不同线程中调用封装数据库操作的类