简体   繁体   English

XmlPullParserException解析string.xml文件时

[英]XmlPullParserException while parsing string.xml file

I am trying to parse an xml file which is similar to string.xml file under res folder. 我正在尝试解析类似于res文件夹下的string.xml文件的xml文件。 But while parsing I am getting exception. 但是在解析时,我遇到了异常。 Below is my xml file. 下面是我的xml文件。

<resources>

    <!-- Enrollment Messages -->
    <string name="configure_email_text">No corporate email accounts have been configured on this device. To    configure them, click <b>Configure Email</b></string>
    <string name="invalid_credentials">Authentication failed. Enter valid credentials.</string>
    <string name="invalid_passcode">Authentication failed. Enter valid Passcode.</string>
     <string-array name="lang_support">
        <item>en_US</item>
        <item>en_GB</item>
    </string-array>
      <string name="picker_combined_view_fmt">Combined view (<xliff:g id="count">%s</xliff:g>)</string>
</resources>    

And below is my code which I am using to parse XML. 下面是我用来解析XML的代码。

 private void loadXML()
    {
        // TODO Auto-generated method stub
        InputStream ins = null;
        try{
            //Debug.startMethodTracing("parsingdetail");

            ins=getAssets().open("strings.xml");
            XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
            // factory.setNamespaceAware(true);
            XmlPullParser xpp = factory.newPullParser();
            xpp.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false);
            xpp.setInput(ins, null);
            parseXml(xpp);
            int j=hMap.size();
            if(j>0){
               System.out.println("Anuj Kumar Jha "+j);
            }
        }catch(XmlPullParserException e){
            System.out.println("anuj kumar jha"+e);
            e.printStackTrace();
        }catch(IOException e){
            System.out.println("anuj kumar jha"+e);
            e.printStackTrace();
        }
        finally{
            if(ins!=null){
                try {
                    ins.close();
                }
                catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }

    }


    private void parseXml(XmlPullParser parser) throws XmlPullParserException,IOException
    {
        // TODO Auto-generated method stub
        int eventType=parser.getEventType();
        while(eventType!=XmlPullParser.END_TAG){
            String key=null;
            String value=null;
            switch(eventType){
            case XmlPullParser.START_TAG:
                String name=parser.getName();
                if(name.equalsIgnoreCase("string")){
                    key=parser.getAttributeValue(null,"name");
                    value=parser.nextText();
                    hMap.put(key, value);
                    if(parser.getEventType()!=XmlPullParser.END_TAG){
                        parser.nextTag();
                    }
                }
            }
            eventType=parser.next();
         }  
     }   

And Below is the Exception I am getting. 下面是我得到的例外

01-18 12:19:10.506: I/System.out(16115): anuj kumar jhaorg.xmlpull.v1.XmlPullParserException: END_TAG expected (position:START_TAG <b>@5:137 in java.io.InputStreamReader@42b54168) 

I think it is because of tag in first string tag. 我认为这是因为第一个字符串标签中的标签。 How to fix this issue? 如何解决这个问题?

Follow this pattern (which I've found on http://developer.android.com/reference/org/xmlpull/v1/XmlPullParser.html ): 请遵循以下模式(我在http://developer.android.com/reference/org/xmlpull/v1/XmlPullParser.html上找到了这种模式):

     int eventType = xpp.getEventType();
     while (eventType != XmlPullParser.END_DOCUMENT) {
      if(eventType == XmlPullParser.START_TAG) {
          String name=parser.getName();
            if(name.equalsIgnoreCase("string")){
                key=parser.getAttributeValue(null,"name");
                String value = collectText(parser);
                hMap.put(key, value);
            }
      }
      eventType = xpp.next();
     }

private String collectText(XmlPullParser parser){
    StringBuilder sb = new StringBuilder();
    int eventType=parser.getEventType();
    while (eventType != XmlPullParser.END_TAG) {
      if(eventType == XmlPullParser.START_TAG){
        sb.append( collectText(parser) );
      } else if(eventType == XmlPullParser.TEXT) {
        sb.append( xpp.getText() );
      }       
      eventType = xpp.next();
     }
  return sb.toString(); 
}

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

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