2011-05-13 56 views
3

我有一个程序将从我的服务器上的.plist接收显示在其中的信息。但是,我将为PC做这个,而且我正在使用Java来做到这一点。 Plist文件不是传统的XML,所以常见的XML解析库不起作用。我找不到任何plist特定的解析器,所以我迷失在如何继续。我看到它的方式我的选择是:Apple Plist转换为Java数据结构

一)找到这样的解析器plist文件

b)使用常规的XML解析器

C)变更程序获取文件做一个变通的从数据(不良)

任何人都有比Objective-C的其他语言用的Plist的经验吗?

+2

AFAIK的.plist是常规XML文件。至少他们声称:<?xml version =“1.0”encoding =“UTF-8”?> – 2011-05-13 04:54:05

+0

在某种程度上,是的。但是,一个正常的XML文件可能看起来像:“ myValue”,plists看起来像“ myPropertyName myValue”,这使得它使用常规的XML解析器婊子。 – Jumhyn 2011-05-13 05:01:56

+0

这是完全有效的XML,您应该使用XML解析器。我想你想用映射工具将它绑定到一个java对象,但是很多XML绑定工具都支持这个工具。尽管如此,有效,简洁(wellformed)XML – 2011-05-13 05:05:45

回答

3

由于@Jochen Bedersdorfer笔记,.plist文件是XML具有良好形成DTD。使用plutil将它们从二进制转换为文本形式。

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" 
    "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 

附录:在一个评论,你问

是不是文本形式,当我得到它?

不一定。这是关于这个问题的一些history

+2

,这里是处理同一个问题一个问题:http://stackoverflow.com/questions/1749197/how-to-read-osx-plist-files-from-java – 2011-05-13 05:07:06

+0

我想我只是不明白XML的一切。我拿到它时不是文本格式吗? – Jumhyn 2011-05-13 05:11:18

+0

暂时没有;他们是二进制格式。 – trashgod 2011-05-13 05:13:26

3

要删除任何混乱:

  1. plist文件可以是在XML或二进制形式。
  2. 二进制plist当然不是XML。
  3. XML plist当然是XML。事实上,这是一个有效的XML ...尝试xmllint针对XML plist。
  4. 是的它有轻微的非常规结构。正如你所说,这就像<dt>title</dt><dd>description</dd>
  5. 可以二进制的plist转换为在OS X上使用plutil通过网络发送之前将其转换为XML的XML的plist。
  6. 使用常规XML解析器,您可以获得keystring。做一个包含这些对的散列。然后你根据键获取字符串。
+0

+1好摘要。另一个方便的提示:如果你使用'plutil -convert',''。下次访问时,plist'会被转换回二进制。 – trashgod 2011-05-13 20:03:57