簡體   English   中英

在Android中解析嵌套的XML節點

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM