在Android中动态解析XML?

时间:2011-02-01 12:10:53

标签: java android xml parsing

有没有办法在不知道XML文件中存在的标签的情况下解析XML文件?

XML文件作为输入提供,必须进行解析。由于我们不知道其中存在的标记,我发现使用DOM Parser或SAX解析器进行解析很困难。

有没有办法解决这个问题?

谢谢, 西瓦库马尔

3 个答案:

答案 0 :(得分:5)

我不清楚问题是什么。 Java DOM和SAX解析器不需要事先知道元素标记和属性。它将解析任何格式良好的XML。我并不熟悉Android上的XML解析,但是这里的教程似乎并没有表明解析器需要提前知道元素标签和属性:

http://www.ibm.com/developerworks/opensource/library/x-android/

例如,您可以使用DOM来解析XML文档以获取DOM树。由于您不知道元素名称,因此您不能仅按元素名称查询特定子元素或子元素的DOM树,而是可以通过Document.getDocumentElement()Node.getChildNodes()之类的调用遍历树。 。由您的代码决定如何处理解析XML文档所产生的结构化DOM树,但DOM解析器本身并不关心特定元素标记和属性是什么。

类似地,您可以将XML文档提供给SAX解析器,SAX将很好地解析它。 SAX将使用元素名称和该元素中的属性映射调用ContentHandler.startElement()回调。您的代码需要确定如何处理SAX解析器在处理XML文档时找到的元素和属性,但SAX并不关心特定元素标记和属性是什么。

所以问题归结为,你希望你的代码对解析XML的结果有什么看法?你想确定它吗?你想打印它吗?您是否尝试将其转换为其他格式?

答案 1 :(得分:1)

为此,您必须将其作为简单文件阅读。用BufferedReader说。 然后在阅读每一行时,搜索<></>的开始和结束标签或模式匹配。

并读取其余字符并将其填入您自己的缓冲区中。 简而言之,就像开发自己的原始解析器一样。

但它肯定会起作用。虽然它很乏味。:)

答案 2 :(得分:0)

您可以在资产文件夹中获取XML文件并解析XML文件,如下所示:

    NodeList root = doc.getElementsByTagName("root");
    NodeList nlQuestions = root.item(0).getChildNodes();

    QuestionObject[] allQuestions = new QuestionObject[nlQuestions.getLength()];

    for (int i = 0; i < nlQuestions.getLength(); i++){
        Node question =  nlQuestions.item(i);
        NodeList childNodes = question.getChildNodes();

        QuestionObject x = new QuestionObject();

        for (int j = 0; j < childNodes.getLength(); j++){
            Node child =  childNodes.item(j);               

            if (child.getNodeName() !="#text"){
                Questions t = Questions.valueOf(child.getNodeName());