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 个 <dict>
标记,但其中只有 3 个具有匹配的关闭标记。
你的一个<dict>
标签——可能是第一个——没有关闭!你应该检查你的输入,当你弄清楚时,关闭它,然后它会解析xml。
除非文档格式正确(但不一定有效),否则无法进行解析。
【讨论】:
如果我打开 plist 文件,Eclipse 不会显示任何错误。 Notepad++ 说它的格式也很好。代码格式化块不显示我的示例的其余部分。 你所有的xml代码都是可见的,也可以通过点击编辑链接查看。无论如何,您关闭了根目录,但由于格式化而不是子标签,这会很奇怪。只需计算打开的<dict>
标签和关闭的</dict>
标签。它们不匹配,因此解析器无法处理它。如果您在粘贴时遗漏了某个标签,请更正您的 xml 源代码。
那是因为我复制了 9600 行的一部分。
好的,那么至少请注意我们应该在哪里想象缺少的</dict>
标签?比如说,在文档的末尾,在关闭根标签之前?此外,如果您可以共享一个链接,我们可以查看您正在处理的实际 xml,这将有所帮助。谢谢!
现在这个例子已经形成了。最后的标签,在关闭根标签之前丢失了。以上是关于Android解析plist到文档的主要内容,如果未能解决你的问题,请参考以下文章