kXML(XmlPullParser)未命中END_TAG

时间:2010-12-23 17:13:21

标签: blackberry xml-parsing xmlpullparser kxml2

我正试图找出一种方法来重写我的一些XML解析代码。我目前正在使用kXML2,这是我的代码 -

    byte[] xmlByteArray;
    try {
        xmlByteArray = inputByteArray;
        ByteArrayInputStream xmlStream = new ByteArrayInputStream(xmlByteArray);
        InputStreamReader xmlReader = new InputStreamReader(xmlStream);
        KXmlParser parser = new KXmlParser();
        parser.setInput(xmlReader);
        parser.nextTag();

        while(true)
        {
            int eventType = parser.next();
            String tag = parser.getName();
            if(eventType == XmlPullParser.START_TAG)
            {
                System.out.println("****************** STARTING TAG "+tag+"******************");
                if(tag == null || tag.equalsIgnoreCase(""))
                {
                    continue;
                }
                else if(tag.equalsIgnoreCase("Category"))
                {
                    // Gets the name of the category.
                    String attribValue = parser.getAttributeValue(0);
                }
            }
            if(eventType == XmlPullParser.END_TAG)
            {
                System.out.println("****************** ENDING TAG "+tag+"******************");
            }
            else if(eventType == XmlPullParser.END_DOCUMENT)
            {
                break;
            }
    }
    catch(Exception ex)
    {

    }

我的输入XML如下 -

<root xmlns:sql="urn:schemas-microsoft-com:xml-sql" xmlns="">
<Category name="xyz">
      <elmt1>value1</elmt1>
      <elmt2>value2</elmt2>
</Category>
<Category name="abc">
      <elmt1>value1</elmt1>
      <elmt2>value2</elmt2>
</Category>
<Category name="def">
      <elmt1>value1</elmt1>
      <elmt2>value2</elmt2>
</Category>   

我的问题很简单,我希望它在遇到关闭的xml标记时点击XmlPullParser.END_TAG。它确实击中了XmlPullParser.START_TAG,但似乎只是跳过/忽略了所有END_TAG

这是怎么回事?或者我错过了什么?

非常感谢任何帮助,
Teja公司。

2 个答案:

答案 0 :(得分:0)

不确定这是否是您的确切问题,但您错过了

</root>

您是否尝试在开始标记之后和内容之后打印出哪种eventType类型?

答案 1 :(得分:0)

哎呀,对不起,我一如既往地写了一个全能的块,这是一个坏主意。我没有注意到我在这里没有发布的代码片段中存在异常,这些异常应该进入XmlPullParser.END_TAG。删除它并像魅力一样工作:)