无法使用SAX Parser捕获元素

问题描述 投票:0回答:1

我正在使用SAX解析器实用程序读取XML文件。

这是我的示例XML

<?xml version="1.0"?><company><Account AccountNumber="100"><staff><firstname>yong</firstname><firstname>jin</firstname></staff></Account></company>

这是代码

import java.util.Arrays;

import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler;

public class ReadXML {

    public static void main(String argv[]) {

        try {

            SAXParserFactory factory = SAXParserFactory.newInstance();
            SAXParser saxParser = factory.newSAXParser();

            DefaultHandler handler = new DefaultHandler() {

                boolean bAccount = false;

                public void startElement(String uri, String localName, String qName, Attributes attributes)
                        throws SAXException {

                    System.out.println("Start Element :" + qName);


                    if (qName.equalsIgnoreCase("ACCOUNT")) {
                        bAccount = true;
                    }

                }

                public void endElement(String uri, String localName, String qName) throws SAXException {

                    System.out.println("End Element :" + qName);

                }

                public void characters(char[] ch, int start, int length) throws SAXException {

                    System.out.println("Im here:" + bAccount);

                    if (bAccount) {
                        System.out.println("Account First Name : " + new String(ch, start, length));
                        bAccount = false;
                        StringBuilder Account = new StringBuilder();
                        for (int i = start; i < ch.length - 1; i--) {
                            if (String.valueOf(ch[i]).equals("<")) {
                                System.out.println("Account:" +Account);
                                break;
                            } else {
                                Account.append(ch[i]);
                            }
                        }
                    }

                }

            };

            saxParser.parse("C:\\Lenny\\Work\\XML\\Out_SaxParsing_01.xml", handler);

        } catch (Exception e) {
            e.printStackTrace();
        }

    }

}

正如您在XML中看到的那样,Account标签就像这样的Account AccountNumber="100",我想要做的是,我也想捕获Tag。

所以为了达到这个目的,在characters方法中,我试图从右到左读取数组,这样当Account AccountNumber="100"遇到事件时我就可以得到Account

但是我无法到达那里,事件正在产生,但它不会采用characters方法。我认为一旦遇到Account标签,它应该进入characters方法。但它不是..!

请问我有什么遗失或做错了吗?

请帮忙..!

java sax
1个回答
0
投票

AccountNumber="100"Account元素的一个属性,因此在startElement处理程序中你可以读出attributes参数来访问该值。

© www.soinside.com 2019 - 2024. All rights reserved.