[英]Parse nested XML nodes in Android
我有這樣的XML文件:
<catalog>
<category>
<books>
<book>
<id>book1</id>
<description>short description</description>
<pages>number of pages</pages>
<author>Anonymous</author>
<name>Book title</name>
</book>
<book>
<id>book2</id>
<description>short description</description>
<pages>number of pages</pages>
<author>Anonymous</author>
<name>Book title</name>
</book>
</books>
</category>
<category>
<books>
<book>
<id>book3</id>
<description>short description</description>
<pages>number of pages</pages>
<author>Anonymous</author>
<name>Book title</name>
</book>
</books>
</category>
</catalog>
我需要帶有類別的ArrayList和帶有書的ArrayList。 這是我的Book和Category類:
public class Book
{
private String id;
private String description;
private String pages;
private String author;
private String name;
}
public class Category {
private ArrayList<Book> books;
private String name;
}
最簡單的方法是什么? 僅使用android庫和東西會比使用一些非商業用途的庫更好。 我嘗試了一些DOM解析器,但是效果不好。
實際上,可以使用dom解析器輕松完成此操作。 這是一個用於解析XML文件的獨立Java程序。 我在標准輸出中打印值,您可以修改它以在android應用程序中使用。
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
import org.w3c.dom.Element;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
public class Main {
public static void main(String[] args) throws IOException, SAXException, ParserConfigurationException {
File fXmlFile = new File("books");
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(fXmlFile);
// iterate through <category> tags
NodeList categoryList = doc.getElementsByTagName("category");
for (int categoryNo=0;categoryNo<categoryList.getLength();categoryNo++) {
Element categoryNode = (Element)categoryList.item(categoryNo);
System.out.println("Category No " +categoryNo);
//iterate through <books> tags
NodeList booksList = categoryNode.getElementsByTagName("books");
for (int booksNo=0;booksNo<booksList.getLength();booksNo++) {
Element books = (Element)booksList.item(0);
// iterate through <book> tags
NodeList bookList = books.getElementsByTagName("book");
for(int bookNo=0;bookNo<bookList.getLength();bookNo++) {
Element bookElement = (Element)bookList.item(bookNo);
System.out.println(bookElement.getElementsByTagName("id").item(0).getTextContent());
System.out.println(bookElement.getElementsByTagName("description").item(0).getTextContent());
System.out.println(bookElement.getElementsByTagName("pages").item(0).getTextContent());
System.out.println(bookElement.getElementsByTagName("author").item(0).getTextContent());
System.out.println(bookElement.getElementsByTagName("name").item(0).getTextContent());
}
}
}
}
}
看看android xml pull解析器 ,此頁面也有示例(它是一個SAX解析器)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.