java sax 程序不去 startElement() 方法

标签 java xml sax

我正在尝试将 sax 解析器与自定义的 DefaultHandler 一起使用,但奇怪的是 dHandler 中的 startElement() 方法从未被调用。 endDocument() 正常工作,但它会打印

Total elements:0

而我的 xml 文件有 11 个“state”类型的元素。

即使我将 total++ 放在 if 语句之外,所以每次调用 startElement() 时它都会递增,它仍然显示 0 个元素。

请帮我解决一下,谢谢

if(e.getSource()==open)
    {
        JFileChooser chooseFile=new JFileChooser();
        int returnVal = chooseFile.showOpenDialog(wnd);
         if (returnVal == JFileChooser.APPROVE_OPTION) {
            File file = chooseFile.getSelectedFile();

                //This is where a real application would open the file.
                parser.parse(new InputSource(new FileInputStream(file)));
                DocumentImpl document = (DocumentImpl)parser.getDocument();
                Node root = document.getLastChild();
                AllElements allelements = new AllElements();
                NodeIteratorImpl iterator =(NodeIteratorImpl)document.createNodeIterator(root,
        NodeFilter.SHOW_ELEMENT, (NodeFilter)allelements, true);
                Node n;
                states.removeAll(states);
                while ((n = iterator.nextNode()) != null)
                {

                    if(n.getNodeName().equals("state"))
                    {
                        NamedNodeMap attrs = n.getAttributes();
                        NodeList children=n.getChildNodes();
                        State newState=new State(attrs.item(0).getNodeValue(),
                                attrs.item(1).getNodeValue(),attrs.item(2).getNodeValue(),attrs.item(3).getNodeValue(),children.item(0).getTextContent());
                        states.add(newState);

                    }

                }
                Collections.sort(states,new StateComparator());
                mod.setRowCount(states.size());
                mod.setColumnCount(5);
                for(int i=0;i<states.size();i++)
                {
                    mod.setValueAt(states.get(i).abbr, i, 0);

                    mod.setValueAt(states.get(i).name, i, 1);
                    mod.setValueAt(states.get(i).population_2k10, i, 2);
                    mod.setValueAt(states.get(i).rank_2k, i, 3);
                    mod.setValueAt(states.get(i).census_1990, i, 4);
                }

                mean=0;
                max=MAXIMUM;
                min=MINIMUM;
                count=0;
                  total=0;
                  SAXParserFactory parserFact = SAXParserFactory.newInstance();
        SAXParser parserS = parserFact.newSAXParser();
        DefaultHandler dHandler = new DefaultHandler(){
            public void startElement(String uri, String name, String element, Attributes atri)
                            {
                if (element.equals("state")){
                    total++;
                }
            }
            public void endDocument(){
                System.out.println("Total elements: " + total);
            }
        };
                  parserS.parse(file, dHandler);
                  meanL.setText("mean="+mean);
                  maxL.setText("max="+max);
                  minL.setText("min="+min);
                  countL.setText("count="+total);
        } else {

        }

     } 

最佳答案

请检查Attribute参数的import语句,应该是:

import org.xml.sax.Attributes;

问候

关于java sax 程序不去 startElement() 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6301678/

相关文章:

java - 永远不会调用 Spring 拦截器

java - 将字符串中的数字与枚举进行比较

java - 如何用注解抛出异常?

java - 找不到符号方法 openFileInput(String)

java - 在 mule 3.9 中一次访问多个 xml 记录

PHP/jQuery Ajax/在 Ajax 处理页面中加载 xml

java - Http 状态 401 此请求需要 HTTP 身份验证 ()。在 tomcat 6

java - POI API 的事件模型在 3.15 版本中不适用(出现编译错误)吗?

java - 从 XML 元素内容中获取 InputStream

java - 使用 poi 和 XSSF 和 SAX 在 JAVA 中实现内存高效的 XLSX 阅读器,但不知道如何获取公式?