首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >kxml2解析错误org.xmlpull.v1.XmlPullParserException

kxml2解析错误org.xmlpull.v1.XmlPullParserException
EN

Stack Overflow用户
提问于 2012-02-18 15:43:48
回答 1查看 809关注 0票数 0

我有以下xml结构:

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<Packages SyncId="634651745071815748" xmlns:xsd="http://www.w3.org/2001/XMLSchema"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Package Id="1848f7cc-0ced-fbb7-140e-b485d28c207f" Title="Active Directory" AvailableContentType="ReportsOnly" Badge="0">
<Icon Id="960EE89A85EAD6244DAEC389A7103F3A5FBB4EC3"/>
</Package>
<Package Id="b923bf10-3a79-a7dc-64dc-9cd875233a3a" Title="Exchange 2007" AvailableContentType="ReportsOnly" Badge="0">
<Icon Id="4999D5496086D802FC261F953DDB50B167431E45"/>
</Package>
<Package Id="367f0d4b-4656-c628-b75f-26535dfa505c" Title="Exchange 2010" AvailableContentType="ReportsOnly" Badge="0">
<Icon Id="320E1D9563CA8FE09FA43D8325F7E9F02BC88737"/></Package>
<Package Id="2c088847-b1ca-a9f7-29a4-a3fbc8cd3445" Title="Local System" AvailableContentType="ReportsOnly" Badge="0">
<Icon Id="FA9BA4CA8B5E626304EDD5323DE252DC0D3F6087"/>
</Package>
<Package Id="9ac614f7-e67b-5f98-3197-49de0469fd3b" Title="Network" AvailableContentType="ReportsOnly" Badge="0">
<Icon Id="B9B35308E738346CA68970BAB2CEC31B4047983F"/>
</Package>
<Package Id="1bac78ad-7834-5549-b775-0ecc7f29b1ae" Title="Routing Table" AvailableContentType="ReportsOnly" Badge="0">
<Icon Id="ABA86D564A461201C0B39785D7A68A3C2CEA4CAD"/>
</Package>
</Packages

我想解析这个xml。我写了这段代码:

代码语言:javascript
复制
public static Packages Parse(String packages)
{
     Packages packs = new Packages();
     Document doc= new Document();

     byte[] xmlByteArray = packages.getBytes();

     ByteArrayInputStream xmlStream = new ByteArrayInputStream(xmlByteArray);
     xmlStream.reset();
     //xmlStream.reset();
     InputStreamReader xmlReader = new InputStreamReader(xmlStream);


     //packages = StringHelper.replace(packages, "<?xml version=\"1.0\" encoding=\"utf-8\"?>", "");
     //packages = StringHelper.replace(packages, " xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"", "");
     KXmlParser parser = new KXmlParser();

     try {
        parser.setInput(xmlReader);

    } catch (XmlPullParserException e) {
        e.printStackTrace();
    }
     try {

        doc.parse(parser);
        xmlReader.reset();
        String posDesc = parser.getPositionDescription();
        **int token = parser.nextTag();**
        parser.require(XmlPullParser.START_TAG, null, "Packages");
        if (parser.getAttributeCount()>0)
        {
            if (parser.getAttributeName(0)=="SyncId") packs.SyncId = parser.getAttributeValue(0); 
        }
        while(parser.nextTag()!=XmlPullParser.END_DOCUMENT)
        {
            parser.require(XmlPullParser.START_TAG, null, "Package");
            Package pack = new Package();
            int packAttrCount = parser.getAttributeCount();
            if(packAttrCount>0)
            {
                for(int i=0; i<packAttrCount; i++)
                {
                    if (parser.getAttributeName(i)=="Id") pack.Id=parser.getAttributeValue(i);
                    else
                        if (parser.getAttributeName(i)=="Title") pack.Title=parser.getAttributeValue(i);
                        else
                            if (parser.getAttributeName(i)=="AvailableContentType") pack.AvailableContentType=parser.getAttributeValue(i);
                            else
                                if (parser.getAttributeName(i)=="Badge") pack.Badge=parser.getAttributeValue(i);

                }
            }
            parser.next();
            parser.require(XmlPullParser.START_TAG, null, "Icon");
            Icon icon = new Icon();
            if (parser.getAttributeCount()>0)
            {
                if (parser.getAttributeName(0)=="Id") icon.Id=parser.getAttributeValue(0);
            }
            parser.nextTag();
            if (parser.getName()=="Data") icon.Data=parser.getText();
            pack.Icon = icon;
            packs.Packs.addElement(pack);
        }
    } catch (IOException e) {
        e.printStackTrace();
    } catch (XmlPullParserException e) {
        e.printStackTrace();
    }

首先调用parser.next()总是返回END_DOCUMENT,并在require方法中适当地接收异常。

org.xmlpull.v1.XmlPullParserException:预期: START_TAG {null}包(java.io.InputStreamReader@bd3ab6b6中的position:END_DOCUMENT null@1:1268 )

我做错什么了?提前感谢!

EN

回答 1

Stack Overflow用户

发布于 2012-02-19 10:07:45

从代码中删除对doc.parse(parser);的调用。

使用kXML,您可以用

  1. Document#parse()

或使用循环使用XML拉出API的。

你想两者兼得。在调用doc.parse(parser)之后,您将自动前进到XML文档的末尾(并到达XmlPullParser.END_DOCUMENT tag)。紧接着,您再次尝试使用第二种方法来解析XML。

根据您的代码判断,您决定使用第二种方法,因此,您应该摆脱对doc.parser(parser)的调用。

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

https://stackoverflow.com/questions/9342550

复制
相关文章

相似问题

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