简体   繁体   English

使用 XMLPullParser 解析 XML 期间出现 XmlPullParserException

[英]XmlPullParserException during parsing XML with XMLPullParser

Need your help to resolve this : Trying to parse this xml -需要您的帮助来解决此问题:尝试解析此 xml -

<LungProtocol><configuration name="FLUS Sitting">   
    <segment order="1" name="left upper anterior">
    <segment order="2" name="left lower anterior">  
</configuration>
<configuration name="FLUS Supine">  
    <segment order="1" name="left upper anterior">
    <segment order="2" name="left lower anterior">
</configuration></LungProtocol>

With following function -具有以下功能 -

public List<LungSegment> parse(InputStream is, String configuration) {  
       try {  
        XmlPullParserFactory factory = XmlPullParserFactory.newInstance();  
        factory.setNamespaceAware(true);  
        XmlPullParser  parser = factory.newPullParser();  
        segment = new LungSegment();
        parser.setInput(is, null);  
        parser.require(XmlPullParser.START_TAG, null, "configuration");
        int eventType = parser.getEventType();
        while (eventType != XmlPullParser.END_DOCUMENT) {  
            String tagname = parser.getName();  
            switch (eventType) {  
            case XmlPullParser.START_TAG:  
                if(("configuration").equalsIgnoreCase(tagname) && parser.getAttributeValue(null, "name").equalsIgnoreCase(configuration)){
                    eventType = parser.next();
                    //eventType = parser.next();
                    tagname = parser.getName();
                    Log.v("XMLTAG", "configuration = "+configuration);
                if (("segment").equalsIgnoreCase(tagname)) {  
                    // create a new instance of segment  
                      segment = new LungSegment();
                      segment.setSegmentName(parser.getAttributeValue(null, "name"));
                      segment.setSegmentOrder(Integer.parseInt(parser.getAttributeValue(null, "order")));
                } 
                }
                break;  

            case XmlPullParser.END_TAG:  
                if (tagname.equalsIgnoreCase("segment")) {  
                    // add segment object to list  
                    segments.add(segment);  
                } else if (("configuration").equalsIgnoreCase(tagname) && parser.getAttributeValue(null, "name").equalsIgnoreCase(configuration)) {
                        return segments;
                }  
                break;   
            }  
            eventType = parser.next();  
        }  

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

    return segments;  
}  

where configuration is the name attribute of configuration tag.其中配置是配置标签的名称属性。 But getting an exception -但得到一个例外 -

org.xmlpull.v1.XmlPullParserException: expected: START_TAG {null}configuration (position:START_DOCUMENT null@1:1 in java.io.InputStreamReader@42323800) 

Please help me where I am going wrong.请帮助我哪里出错了。

Make these two changes in your code:在您的代码中进行以下两项更改:

  1. Make xml valid.使 xml 有效。 The segment tags are not ended.段标签没有结束。 They should be: <segment order="1" name="left upper anterior"/>它们应该是: <segment order="1" name="left upper anterior"/>

  2. Remove the line parser.require(XmlPullParser.START_TAG, null, "configuration");删除行parser.require(XmlPullParser.START_TAG, null, "configuration");

Everything else looks fine.其他一切看起来都很好。 I was able to run your code as well.我也能够运行你的代码。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM