2011-05-13 57 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