Есть файл xml :
Код: Выделить всё
?xml version="1.0" encoding="utf-8"?>
<array>
<city id="City1">
<category id="FirstCategory">
<subcategory id="FirstSubCategory"></subcategory>
<subcategory id="SecondSubCategory"></subcategory>
<subcategory id="ThirdSubCategory"></subcategory>
</category>
<category id="SecondCategory">
<subcategory id="FirstSubCategory"></subcategory>
<subcategory id="SecondSubCategory"></subcategory>
<subcategory id="ThirdSubCategory"></subcategory>
</category>
<category id="ThirdCategory">
<subcategory id="FirstSubCategory"></subcategory>
<subcategory id="SecondSubCategory"></subcategory>
<subcategory id="ThirdSubCategory"></subcategory>
</category>
</city>
<city id="City2">
...
...
</city>
</array>
Делаю парсинг с помощью Sax в отдельном классе
Код: Выделить всё
package com.android.cityviewer;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
import android.util.Log;
public class CategoriesParser {
public static RootArray top;
public static CityArray c;
public static CategoryArray categoria;
public static SubArray sub;
public static boolean flag;
public static void PrintAll() {
System.out.println(top.getRoot());
for (int i=0;i<top.getChildCount();i++)
{
System.out.println(top.getChildAt(i));
for(int j=0;j<top.cities.size();j++)
{
System.out.println(" "+top.cities.get(i).cat.get(j).name);
for(int q=0;q<top.cities.get(i).cat.size();q++)
{
System.out.println(" "+top.cities.get(i).cat.get(j).subs.get(q).name);
}
}
}
}
protected static int i=0;
protected static int j=0;
public static void parsing(String string) {
try {
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser saxParser = factory.newSAXParser();
DefaultHandler handler = new DefaultHandler() {
public void startDocument()
{
//top = new DefaultMutableTreeNode("Root");
top = new RootArray("Root");
}
public void startElement(String uri, String localName,String qName,
Attributes attr) throws SAXException {
if (qName.equals("city")){
c= new CityArray(attr.getValue("id"));
top.cities.add(c);
flag = false;
}
if (qName.equals("category")){
categoria = new CategoryArray(attr.getValue("id"));
top.cities.get(i).cat.add(categoria);
flag = false;
}
if (qName.equals("subcategory")){
sub = new SubArray(attr.getValue("id"));
top.cities.get(i).cat.get(j).subs.add(sub);
flag = false;
}
}
public void endElement(String uri, String localName,
String qName) throws SAXException {
if (qName.equals("city")){
i++;
j=0;
c=null;
}
if (qName.equals("category")){
j++;
categoria = null;
}
if (qName.equals("array")){
PrintAll();
}
}
public void characters(char ch[], int start, int length) throws SAXException {}
};
flag = true;
saxParser.parse(string, handler);
if(!flag)
{
Log.d("CityViewerLog", flag+" = flag");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
Классы Root,City,Category,Sub содержат шаблон(на примере RootArray)
Код: Выделить всё
package com.android.cityviewer;
import java.util.Vector;
public class RootArray {
String name;
Vector<CityArray> cities = new Vector<CityArray>();
RootArray(String value)
{
this.name=value;
}
public void add(CityArray city)
{
cities.addElement(city);
}
public String getRoot() {
// TODO Auto-generated method stub
return this.name;
}
public int getChildCount() {
// TODO Auto-generated method stub
return cities.size();
}
public String getChildAt(int i) {
// TODO Auto-generated method stub
return (cities.get(i).name);
}
}
Проблема собственно заключается вот в чем. Заполняет только верхний узел (top="Root")
Дальше парсинг не идет.
В чем ошибка и как её устранить?
P.S. Насколько я понимаю, при сборке проекта, файлы которые лежат не в res/values/ не будут компилится... Я к сожалению не знаю как билдится проект,и какие файлы включаются при сборке в apk.