我正在尝试读取包含120个这样的项目的Xml文件。
<?xml version="1.0" encoding="utf-8"?>
<books>
<Book>
<bookName >Libro 1</bookName>
<bookSection>Unidad 1</bookSection>
<memorization>[A long string of information]…</memorization>
</Book>
<Book>.....</Book>
</books>
在我的Android应用中,我想将所有这些信息放在ArrayList<book>
所以在虚空OnCreate中我这样做:
Resources res = getResources();
XmlResourceParser x = res.getXml(R.xml.textos);
try {
insertXML(x);
} catch (IOException e) {
e.printStackTrace();
} catch (XmlPullParserException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
和InsertXML看起来像这样。
private void insertXML(XmlPullParser x) throws XmlPullParserException, IOException {
try {
int eventType = x.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT) {
Textos seleccion = new Textos();
if ( eventType == XmlPullParser.START_TAG ) {
if (x.getAttributeValue(null, "Book") != null) {
seleccion.setBook(x.getAttributeValue(null, "bookName"));
seleccion.setSection(x.getAttributeValue(null, "bookSection"));
seleccion.setMemorization(x.getAttributeValue(null, "memorization"));
}
}
if ( eventType == XmlPullParser.END_TAG ) {
if (x.getName().equals("Book")) {
texto.add(seleccion);
}
}
eventType = x.next();
}
} catch (Exception e) {
e.printStackTrace();
}
}
这是一个错误,因为永远不会进入if (x.getAttributeValue(null, "Book") != null) {
当我使用调试模式时告诉我x.depth() = 0
那么,我做错了什么?
答案 0 :(得分:1)
Book
不是属性 - 它是一个元素(标记)。你应该使用:
if (x.getName().equals("Book"))
检查您是否在Book
元素上。但是,这实际上对您没有多大帮助,因为您实际上是在bookName
,bookSection
和memorization
标记之后。我怀疑你真的想要(在检查START_TAG
事件中):
if (x.getName().equals("bookName")) {
seleccion.setBook(x.nextText());
} else if (x.getName().equals("bookSection")) {
seleccion.setSection(x.nextText());
} else if (x.getName().equals("memorization")) {
seleccion.setMemorization(x.nextText());
}
了解元素和属性之间的区别非常重要。例如,在:
<x y="z">Foo</x>
元素是<x>
,y
是属性值"z"
,Foo
是x
内的文字1}}元素。