【问题标题】:Parse nested XML nodes in Android在 Android 中解析嵌套的 XML 节点
【发布时间】:2014-08-27 09:29:43
【问题描述】:

我有这样的 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 解析器,但效果不佳。

【问题讨论】:

  • 到目前为止做了什么?

标签: java android xml parsing


【解决方案1】:

其实使用 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());
                    }

                }
            }
        }
    }

【讨论】:

    【解决方案2】:

    看看android xml pull parser,这个页面也有例子 (它是一个 SAX 解析器)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-23
      • 2021-11-04
      • 2015-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-04
      相关资源
      最近更新 更多