Java me kxml2解析简单XML

Java me kxml2解析简单XML,java-me,kxml2,Java Me,Kxml2,我试图在j2me应用程序中解析一个简单的XML文件。但解析失败: XML文件 <companies> <company CompanyId="6"> <CompanyName>Test Company 1</CompanyName> <SapNumber>0</SapNumber> <RootCompanyId>1</R

我试图在j2me应用程序中解析一个简单的XML文件。但解析失败:

XML文件

<companies> 
       <company CompanyId="6"> 
           <CompanyName>Test Company 1</CompanyName> 
           <SapNumber>0</SapNumber> 
           <RootCompanyId>1</RootCompanyId> 
           <ParentCompanyId /> </company> 
    </companies>

我想我知道这里出了什么问题。匹配
标记并获得CompanyId属性的值后,输入while循环。但观察此时会发生什么:

  • 第一次执行while条件时,解析器将匹配开始标记,因此if条件将为true,您将获得标记内的文本
  • 我对kXml的内部工作原理不太熟悉,但在第二次迭代中,您的解析器状态必须指向文本节点(即
    标记内部)或结束标记(即
    )。无论哪种方式,while条件都将失败,因为您不在开始标记处
  • 此时,您要求下一个标记是
    的结束标记,但是,您的状态仍然没有更改,这将无法满足要求

  • 我的最佳猜测是,内部指针指向
    中的文本节点,这就是为什么会出现
    “意外类型(位置:text:Test Company1…”
    消息。

    解析如何失败?是否会出现异常?异常:意外类型(位置:text:Test Company1…”。。。
        KXmlParser parser = new KXmlParser();
        parser.setInput(new InputStreamReader(new ByteArrayInputStream(input.getBytes())));
        parser.nextTag();
        parser.require(XmlPullParser.START_TAG, null, "companies");
    
        while(parser.nextTag() == XmlPullParser.START_TAG) 
        {
            Company temp_company = new Company();
            parser.require(XmlPullParser.START_TAG, null, "company");
            String CompanyID = parser.getAttributeValue(0);
            temp_company.putValue("CompanyId", CompanyID);
            while(parser.nextTag() == XmlPullParser.START_TAG) 
            {
                if(parser.getName() == "CompanyName")
                {
                    temp_company.putValue("CompanyName", parser.nextText());
                }
            }
            parser.require(XmlPullParser.END_TAG, null, "company");
            listCompany.put(CompanyID, temp_company);
        }
        parser.require(XmlPullParser.END_TAG, null, "elements");