Невозможно проанализировать данные, поскольку я получаю исключение expatParser
Ребята, следующие это XML, который я пытаюсь разобрать
<?xml version="1.0" encoding="UTF-8"?><Categories><category name="Banquet & Marriage Hall" id="1" image=""/><category name="Crematorium, Burial Ground" id="2" image=""/><category name="Educational Institution" id="3" image=""/><category name="Embassies & Consulates" id="4" image=""/><category name="Fire Station" id="5" image=""/><category name="Government Office" id="6" image=""/></Categories>
Ниже приведен код моего парсера, который я использую
public byte parse(){
SAXParserFactory spf = null;
SAXParser sp = null;
InputStream inputStream = null;
try {
inputStream = new ByteArrayInputStream(data.getBytes());
spf = SAXParserFactory.newInstance();
if (spf != null) {
sp = spf.newSAXParser();
**sp.parse(inputStream, this);**
}
}
/*
* Exceptions need to be handled MalformedURLException
* ParserConfigurationException IOException SAXException
*/
catch (Exception e) {
System.out.println("Exception: " + e);
e.printStackTrace();
} finally {
try {
if (inputStream != null)
inputStream.close();
} catch (Exception e) {
}
}
if (categorieslist != null && categorieslist.size() > 0) {
// Log.d("Array List Size",""+tipsList.get(4).getTitle());
return 1;
} else {
return 0;
}
}
public ArrayList<Categories> getParserCategoriesList(){
return categorieslist;
}
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
if(localName.equalsIgnoreCase("Categories")){
if(localName.equalsIgnoreCase("category")){
categories = new Categories();
categorieslist.add(categories);
categories.setId(attributes.getValue("id"));
Log.d("ID",attributes.getValue("id"));
categories.setName(attributes.getValue("name"));
Log.d("NAME",attributes.getValue("name"));
/*categories.setImage(attributes.getValue("image"));
Log.d("image",attributes.getValue("image"));*/
}
}
sp.parse() - это код, который дает мне исключение expatParser. Я использовал ту же логику в предыдущем анализе 5 xml, и я не получаю эту ошибку. Что я делаю не так или это XML не так??
2 ответа
Решение
Я думаю, что синтаксический анализатор выдает исключение, когда он достигает символа амперсанда (&). Вы можете найти проблему, похожую на вашу, здесь
Да, предыдущий комментарий верен, парсер выдает исключение, когда он достигает & или любого специального символа, есть две опции.
- вам нужно заменить специальный символ (используйте закодированное значение)
- вам нужно связать узел с CDATA, который содержит специальный символ..
всего наилучшего