这个xml解析器(Android)有什么问题?
我想解析一个xml文件。我正试图找到错误,但找不到。你能帮我吗? xml: 以及我活动的分析部分:这个xml解析器(Android)有什么问题?,android,xml,parsing,sax,Android,Xml,Parsing,Sax,我想解析一个xml文件。我正试图找到错误,但找不到。你能帮我吗? xml: 以及我活动的分析部分: private void readXML() { // TODO Auto-generated method stub Log.d("FUNC","READXML"); try { SAXParserFactory spf = SAXParserFactory.newInstance(); SAXParser sp = spf.newSAX
private void readXML() {
// TODO Auto-generated method stub
Log.d("FUNC","READXML");
try {
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser sp = spf.newSAXParser();
XMLReader xr = sp.getXMLReader();
XMLParser xp = new XMLParser(dataContainer);
xr.setContentHandler(xp);
InputStream is = getResources().openRawResource(
R.raw.data);
xr.parse(new InputSource(is));
} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
Log.d("PARSERCONFEX","PARSERCONFEX");
e.printStackTrace();
} catch (SAXException e) {
// TODO Auto-generated catch block
Log.d("SAXEX","SAXEX");
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
Log.d("IOEX","IOEX");
e.printStackTrace();
}
}
从log.d()中,我可以看到只创建了来自构造函数的日志、“CHARS”和“END”日志。
这是我的日志:
12-06 06:38:11.063: E/Trace(629): error opening trace file: No such file or directory (2)
12-06 06:38:11.623: D/FUNC(629): INIT
12-06 06:38:11.623: D/FUNC(629): READXML
12-06 06:38:11.643: D/FUNC(629): XMLPARSER()
12-06 06:38:11.664: D/CHARS(629): CHARS
12-06 06:38:11.664: D/CHARS(629): CHARS
12-06 06:38:11.664: D/CHARS(629): CHARS
12-06 06:38:11.664: D/CHARS(629): CHARS
12-06 06:38:11.664: D/CHARS(629): CHARS
12-06 06:38:11.673: D/END(629): END
12-06 06:38:11.673: D/CHARS(629): CHARS
12-06 06:38:11.673: D/CHARS(629): CHARS
12-06 06:38:11.673: D/CHARS(629): CHARS
12-06 06:38:11.673: D/END(629): END
12-06 06:38:11.673: D/CHARS(629): CHARS
12-06 06:38:11.673: D/CHARS(629): CHARS
12-06 06:38:11.683: D/CHARS(629): CHARS
12-06 06:38:11.683: D/END(629): END
12-06 06:38:11.683: D/CHARS(629): CHARS
12-06 06:38:11.683: D/CHARS(629): CHARS
12-06 06:38:11.683: D/CHARS(629): CHARS
12-06 06:38:11.683: D/END(629): END
12-06 06:38:11.683: D/CHARS(629): CHARS
12-06 06:38:11.683: D/CHARS(629): CHARS
12-06 06:38:11.693: D/CHARS(629): CHARS
12-06 06:38:11.693: D/END(629): END
12-06 06:38:11.693: D/CHARS(629): CHARS
12-06 06:38:11.693: D/CHARS(629): CHARS
12-06 06:38:11.693: D/END(629): END
12-06 06:38:11.693: D/CHARS(629): CHARS
12-06 06:38:11.693: D/CHARS(629): CHARS
12-06 06:38:11.693: D/CHARS(629): CHARS
12-06 06:38:11.693: D/CHARS(629): CHARS
12-06 06:38:11.703: D/CHARS(629): CHARS
12-06 06:38:11.703: D/END(629): END
12-06 06:38:11.703: D/CHARS(629): CHARS
12-06 06:38:11.713: D/CHARS(629): CHARS
12-06 06:38:11.713: D/CHARS(629): CHARS
12-06 06:38:11.713: D/END(629): END
12-06 06:38:11.713: D/CHARS(629): CHARS
12-06 06:38:11.713: D/CHARS(629): CHARS
12-06 06:38:11.713: D/CHARS(629): CHARS
12-06 06:38:11.713: D/END(629): END
12-06 06:38:11.713: D/CHARS(629): CHARS
12-06 06:38:11.713: D/CHARS(629): CHARS
12-06 06:38:11.723: D/CHARS(629): CHARS
12-06 06:38:11.723: D/END(629): END
12-06 06:38:11.723: D/CHARS(629): CHARS
12-06 06:38:11.723: D/CHARS(629): CHARS
12-06 06:38:11.723: D/CHARS(629): CHARS
12-06 06:38:11.723: D/END(629): END
12-06 06:38:11.733: D/CHARS(629): CHARS
12-06 06:38:11.733: D/CHARS(629): CHARS
12-06 06:38:11.733: D/END(629): END
12-06 06:38:11.733: D/CHARS(629): CHARS
12-06 06:38:11.733: D/CHARS(629): CHARS
12-06 06:38:11.733: D/END(629): END
12-06 06:38:12.063: I/Choreographer(629): Skipped 77 frames! The application may be doing too much work on its main thread.
12-06 06:38:12.093: D/gralloc_goldfish(629): Emulator without GPU emulation detected.
下面是一个使用SAX的示例 JAVA类 数据
public class Data {
private Integer id;
private String name;
private Integer age;
private String phone;
private String address;
public Data(){}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
数据处理程序
public class DatasHandler extends DefaultHandler {
private ArrayList<Data> alDatas;
private Data data;
private String reading;
public DatasHandler(){}
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
if(qName.equals("maintag")){
alDatas = new ArrayList<>();
}
if(qName.equals("data")){
data = new Data();
}
}
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
if(qName.equals("data")){
alDatas.add(data);
data = null;
}
if(qName.equals("id")){
data.setId(Integer.parseInt(reading));
}
if(qName.equals("name")){
data.setName(reading);
}
if(qName.equals("age")){
data.setAge(Integer.parseInt(reading));
}
if(qName.equals("phone")){
data.setPhone(reading);
}
if(qName.equals("address")){
data.setAddress(reading);
}
}
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
reading = new String(ch, start, length);
}
public ArrayList<Data> getAlDatas() {
return alDatas;
}
}
public final class XMLManager {
public static ArrayList<Data> getAlDatas(){
ArrayList<Data> alDatas = null;
SAXParserFactory factory = SAXParserFactory.newInstance();
try {
SAXParser parser = factory.newSAXParser();
DatasHandler dHandler = new DatasHandler();
parser.parse(new File("D:\\Loic_Workspace\\SaxExample\\res\\test.xml"), dHandler);
alDatas = dHandler.getAlDatas();
} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return alDatas;
}
}
你似乎想在Android上使用它。因此,我认为您可以在XMLManager类中执行以下操作:
InputSource in = new InputSource(getResources().openRawResource(R.raw.data));
parser.parse(in, dHandler);
告诉我它是否有效,
“我试图找出错误,但是我找不到它。”我们既找不到它,也没有找到一个你认为是错误的堆栈跟踪或适当的描述。错误是它没有创建我的对象数据流数据。它不会进入应该在其中创建currentData实例的if交叉点。(而且它不是进入应该记录“Maintagfound”的交叉口。我也会试试这个!谢谢你的回答!public final class XMLManager {
public static ArrayList<Data> getAlDatas(){
ArrayList<Data> alDatas = null;
SAXParserFactory factory = SAXParserFactory.newInstance();
try {
SAXParser parser = factory.newSAXParser();
DatasHandler dHandler = new DatasHandler();
parser.parse(new File("D:\\Loic_Workspace\\SaxExample\\res\\test.xml"), dHandler);
alDatas = dHandler.getAlDatas();
} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return alDatas;
}
}
public class MyMain {
/**
* @param args
*/
public static void main(String[] args) {
ArrayList<Data> alDatas = XMLManager.getAlDatas();
for(Data d:alDatas){
System.out.println(d.getName());
System.out.println(d.getId());
System.out.println(d.getAge());
System.out.println(d.getPhone());
System.out.println(d.getAddress());
System.out.println("--------------------");
}
}
}
x y
1
16
06/30 123-4567
Veszprem Valami ut 10.
--------------------
p q
2
18
06/70 987-6543
Budapest Ulloi ut 21.
--------------------
InputSource in = new InputSource(getResources().openRawResource(R.raw.data));
parser.parse(in, dHandler);