首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >kxml2解析简单XML

kxml2解析简单XML
EN

Stack Overflow用户
提问于 2009-07-21 12:20:38
回答 1查看 4.1K关注 0票数 0

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

XML文件

代码语言:javascript
复制
<companies> 
       <company CompanyId="6"> 
           <CompanyName>Test Company 1</CompanyName> 
           <SapNumber>0</SapNumber> 
           <RootCompanyId>1</RootCompanyId> 
           <ParentCompanyId /> </company> 
    </companies>

Parser代码段

代码语言:javascript
复制
    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");
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-07-29 11:58:23

我想我能看出这里出了什么问题。在匹配了<company>标记并获得了CompanyId属性的值之后,您将输入一个while循环。但是观察一下在这一点上会发生什么:

当您第一次执行that条件时,解析器将匹配<CompanyName>开始标记,因此if条件将为真,并且您将在标签内获得文本。

  • I不太熟悉kXml的内部工作,但在第二次迭代时,解析器状态必须指向文本节点(即<CompanyName>标记内)或末尾标记(即。</CompanyName>).无论哪种情况,您的状态都将失败,因为您没有处于开始标记中。此时,您需要将下一个标记作为<company>,的结束标记,但是,您的状态仍未更改,这将无法满足。

我最好的猜测是,内部指针指向<CompanyName>内部的文本节点,这就是您获得"unexpected type (position: Text: Test Company1..."消息的原因。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1158854

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档