2013-12-05 6 views
0

У меня есть XML-файл (локальный), который хранится в:/активыандроид - XMLPullParser Ошибка

я использую XMLpulparser разобрать, что XML, но в моем LogCat у меня есть эти проблемы-х:

enter image description here

вот мой XML-файл:

<?xml version="1.0" encoding="utf-8"?> 
<countries> 
<country> 
    <name>Iran</name> 
    <phonecode>+98</phonecode> 
    <code>IRI</code> 
</country> 
<country"> 
    <name>United State</name> 
    <phonecode>+1</phonecode> 
    <code>USA</code> 
</country> 

+0

вы используете ОТД или что-нибудь подобное подтверждение? – njzk2

ответ

1

Это дает вам эту ошибку, потому что есть «знак второго тега начала страны». Также, кажется, отсутствует тег закрытия стран в конце файла.

0

один из тега вашей страны содержит "символ, который не является приемлемым в именах тегов XML.

Вы писали

<country"> 
    .... 
    </country> 

вы должны написать

<country> 

    </country> 
0

# В то время как у вас есть некоторые ошибки в вашем XML-коде, который вы можете проверить из приведенных выше ответов, идеальный способ анализа вашего XML-кода будет чем-то как

Ex. Содержание XML-файл (сохраненный во внешнем хранилище, как code.xml)

<?xml version="1.0" encoding="utf-8"?> 
<countries> 
<country> 
<name>Iran</name> 
<phonecode>+98</phonecode> 
<code>IRI</code> 
</country> 
<country> 
<name>United State</name> 
<phonecode>+1</phonecode> 
<code>USA</code> 
</country> 
</countries> 

# Позволяет начать разбор его

1. Сначала создайте вспомогательный класс

package in.example.helpers; 

import android.util.Xml; 
import org.xmlpull.v1.XmlPullParser; 
import org.xmlpull.v1.XmlPullParserException; 
import java.io.IOException; 
import java.io.InputStream; 

public class XmlDataParseHelper { 

private XmlPullParser parser; 
private static final String NULL = null; 

/** 
* 
* @param in 
* @throws XmlPullParserException 
* @throws IOException 
* @throws IllegalArgumentException 
*/ 
public XmlDataParseHelper(InputStream in) throws XmlPullParserException, 
     IOException, IllegalArgumentException { 
    try { 
     parser = Xml.newPullParser(); 
     parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false); 
     parser.setInput(in, null); 
     parser.nextTag(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

/** 
* 
* @return XmlPullParser 
*/ 
public XmlPullParser getParser() { 
    return parser; 
} 

/** 
* 
* @param parser 
* @param tag 
* @return String 
* @throws IOException 
* @throws XmlPullParserException 
*/ 
public static String readTag(XmlPullParser parser, String tag) 
     throws IOException, XmlPullParserException { 
    String tagData = ""; 
    parser.require(XmlPullParser.START_TAG, NULL, tag); 
    if (parser.next() == XmlPullParser.TEXT) { 
     tagData = parser.getText(); 
     parser.nextTag(); 
    } 
    parser.require(XmlPullParser.END_TAG, NULL, tag); 
    return tagData; 
} 

/** 
* 
* @param parser 
* @param tag 
* @param attributeName 
* @return String 
* @throws IOException 
* @throws XmlPullParserException 
*/ 
public static String readAttribute(XmlPullParser parser, String tag, 
     String attributeName) throws IOException, XmlPullParserException { 
    parser.require(XmlPullParser.START_TAG, NULL, tag); 
    String attributeData = parser.getAttributeValue(NULL, attributeName); 
    parser.nextTag(); 
    parser.require(XmlPullParser.END_TAG, NULL, tag); 
    return attributeData; 
} 

} 

2. Прочтите xml fi ле, как

public InputStream readFile(String fileName) throws FileNotFoundException, 
      IOException { 
    //check external storage present 
    // else throw new IOException(); 

    return new FileInputStream(Environment.getExternalStorageDirectory() 
      + "/" + fileName); 
} 

3. Пропускают InputStream к другому методу, который инициализирует объект XMLPullParser

public void readXmlFile(String fileName) { 
    try { 
     if (fileName.isEmpty()) 
     throw new NullPointerException(); 
     readData(new XmlDataParseHelper(readFile(fileName)).getParser()); 
    } catch (IOException e) { 
      e.printStackTrace(); 
    } catch (XmlPullParserException e) { 
      e.printStackTrace(); 
    } catch (IllegalArgumentException e) { 
      e.printStackTrace(); 
    } 
} 

4. Atlast разобрать объект XMLPullParser, как

public void readData(XmlPullParser parser) 
       throws XmlPullParserException, IOException { 
    int eventType = parser.getEventType(); 
    String tagName = ""; 
    Log.w("Developer", "Reading file..."); 
    while (eventType != XmlPullParser.END_DOCUMENT) { 
     switch (eventType) { 
      case XmlPullParser.START_DOCUMENT : 
       Log.w("Developer", "Reading backup file..."); 
       break; 
      case XmlPullParser.START_TAG : 
       tagName = parser.getName(); 
       if (tagName.equals("countries")) { 
        Log.w("XMLParse", "Start TAG countries"); 
        // do something when countries tag starts 
       } 
       if (tagName.equals("country")) { 
        Log.w("XMLParse", "Start TAG country"); 
        // do some when country tag starts 
       } else if (tagName.equals("name")) { 
        // read tag value using XmlDataParseHelper class 
        String countryName = XmlDataParseHelper.readTag(parser, 
            "name"); 
        Log.w("XmlParser", "Country name : "+countryName); 
       } else if (tagName.equals("phonecode")) { 
        String countryPhoneCode = 
            XmlDataParseHelper.readTag(parser,"phonecode"); 
        Log.w("XmlParser", "Country Phone code : "+countryPhoneCode); 
       } else if (tagName.equals("code")) { 
        String countryCode = 
           XmlDataParseHelper.readTag(parser, "code"); 
        Log.w("XmlParser", "Country code name : "+countryCode); 
       } 
      break; 
      case XmlPullParser.END_TAG : 
       tagName = parser.getName(); 
       if (tagName.equals("countries")) { 
         // do something when counties tag is close. 
       }   
      break; 
     } 
     eventType = parser.next(); 
    } 
    Log.w("Developer", "File parsing complete..."); 
} 

К прочитайте файл, просто вызовите метод readXmlFile(String fileName) в AsyncTask с именем файла, хранящегося в Внешнем хранилище.

#I hope it helps you and others in the future.

Весь андроид рабочий пример кода здесь https://gist.github.com/rachitrm/7810837 или форк проекта http://www.github.com/rachitrm/rm-xmlparser/

+0

Спасибо за ответ, все в порядке, но я думаю, что ваш _ ** «XmlDataParseHelper» ** _ не прав, потому что когда он хочет читать тег, он генерирует исключение и не может читать содержимое тега (данные) , не могли бы вы исправить его и отредактировать свой пост? Большое спасибо ! – kianm98

+0

@ kianm98 хорошо я использую класс помощника в моем приложении, он работает хорошо :) надеюсь, что некоторые проблемы в логике некоторые где. –

+0

@ kianm98 У меня есть ответ 0 ошибок теперь с источником проекта. –

Смежные вопросы