Android解析plist到文档

Posted

技术标签:

【中文标题】Android解析plist到文档【英文标题】:Android parsing plist to document 【发布时间】:2011-04-21 08:58:49 【问题描述】:

我正在尝试解析 iPhone plist 文件以将其与 xpath 和 xpathexpression 一起使用。

plist 示例:

<plist version="1.0">
    <dict>
        <key>00</key>
        <dict>
            <key>pkw</key>
            <dict>
                <key>gas</key>
                <integer>0</integer>
                <key>diesel</key>
                <dict>
                    <key>ohne</key>
                    <integer>0</integer>
                    <key>pm01</key>
                    <integer>0</integer>
                    <key>pm0</key>
                    <integer>0</integer>
                    <key>pm1</key>
                    <integer>0</integer>
                    <key>pm2</key>
                    <integer>0</integer>
                    <key>pm3</key>
                    <integer>0</integer>
                    <key>pm4</key>
                    <integer>0</integer>
                    <key>pm5</key>
                    <integer>4</integer>
                </dict>
                <key>otto</key>
                <integer>0</integer>
            </dict>
        </dict>
    </dict>
</plist>

通过以下代码,我得到了SAXParserException

预期名称(位置:START_TAG @3:41 in java.io.InputStreamReader@43e395f0)

    DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
builderFactory.setNamespaceAware(true);
DocumentBuilder builder = null;
try 
    builder = builderFactory.newDocumentBuilder();
 catch (ParserConfigurationException e1) 
    // TODO Auto-generated catch block
    e1.printStackTrace();


Document document = null;
try 
    document = builder.parse(getApplicationContext().getResources().openRawResource(R.xml.finedust));
 catch (NotFoundException e) 
    // TODO Auto-generated catch block
    e.printStackTrace();
 catch (SAXException e) 
    // TODO Auto-generated catch block
    e.printStackTrace();
 catch (IOException e) 
    // TODO Auto-generated catch block
    e.printStackTrace();

也许有人有想法?

【问题讨论】:

【参考方案1】:

问题是,您试图从 res/xml/ 文件夹 (R.xml.finedust) 加载 plist xml 文档作为原始资源。

您应该将您的 xml 文件放在 res/raw/ 文件夹 (res/raw/findedust.xml) 中,并通过 R.raw.finedust 访问它。

所以您的document 初始化将是:

document = builder.parse(getApplicationContext().getResources().
    openRawResource(R.raw.finedust));

这样就可以了!

已弃用

您打开了 4 个 &lt;dict&gt; 标记,但其中只有 3 个具有匹配的关闭标记。

你的一个&lt;dict&gt; 标签——可能是第一个——没有关闭!你应该检查你的输入,当你弄清楚时,关闭它,然后它会解析xml。

除非文档格式正确(但不一定有效),否则无法进行解析。

【讨论】:

如果我打开 plist 文件,Eclipse 不会显示任何错误。 Notepad++ 说它的格式也很好。代码格式化块不显示我的示例的其余部分。 你所有的xml代码都是可见的,也可以通过点击编辑链接查看。无论如何,您关闭了根目录,但由于格式化而不是子标签,这会很奇怪。只需计算打开的&lt;dict&gt; 标签和关闭的&lt;/dict&gt; 标签。它们不匹配,因此解析器无法处理它。如果您在粘贴时遗漏了某个标签,请更正您的 xml 源代码。 那是因为我复制了 9600 行的一部分。 好的,那么至少请注意我们应该在哪里想象缺少的&lt;/dict&gt; 标签?比如说,在文档的末尾,在关闭根标签之前?此外,如果您可以共享一个链接,我们可以查看您正在处理的实际 xml,这将有所帮助。谢谢! 现在这个例子已经形成了。最后的标签,在关闭根标签之前丢失了。

以上是关于Android解析plist到文档的主要内容,如果未能解决你的问题,请参考以下文章

Android解析plist字符串和整数

Android plist xml解析问题

XMLwise 的 Android PList 问题:对象/字符串到列表视图

android Plist解析器xml资产

使用dd-plist的Android plist解析器

android plist解析器