2010-10-25 51 views
5

我試圖用c#讀取我的Apple Safari歷史記錄,它存儲在plist文件中,但是我總是收到一個錯誤,我不確定正確的方法是什麼做到這一點。 我試圖執行的代碼是這樣的:解析.plist文件爲普通XML C#

XmlDocument xmd = new XmlDocument(); 
xmd.LoadXml(@"C:\Users\Oran\AppData\Roaming\AppleComputer\Safari\History.plist"); 

,我總是得到以下錯誤: "Data at the root level is invalid. Line 1, position 1."

有誰知道什麼是錯,此代碼和推薦什麼是閱讀的plist文件的最好方法?

回答

2

試試這個,everyhing應該罰款;-)

xmd.Load(...) 

您使用自動加載XML數據從一個字符串不是從文件中的一個。

+0

它仍然給我同樣的錯誤...也許蘋果serialze safari的plists莫名其妙? – Oran 2010-10-25 15:25:27

+0

1.)你能證實,這個xml格式良好嗎?嘗試用xml編輯器打開它。 2.)確保文件在那裏。 3.)確保根元素之前沒有空行4.)安全性如何?你有權限打開文件嗎? (也許當你的應用程序是一個Web服務或網站,它沒有特權) – Dennis 2010-10-26 05:38:37

+0

1.不,我不能用一個XML編輯器打開它,但它與plist編輯器打開完美... – Oran 2010-10-27 10:15:41

1

plist不一定是XML。有四種不同的序列化方法 - 舊式(用於NeXT;不再使用),XML,二進制和JSON(10.7中的新增功能)。出於效率原因,Safari的History.plist很可能是二進制文件。

如果我沒有弄錯,Safari for Windows確實在Common Files \ Apple Application Support中附帶plutil.exe。你可以使用像plutil -convert xml1 SOME_FILE.plist來轉換你的文件。

12

它看起來像Apple Safari history.plist是二元plist。我發現了一個偉大的項目:

https://github.com/animetrics/PlistCS

自述:

This is a C# Property List (plist) serialization library (MIT license). It supports both XML and binary versions of the plist format.

+0

作品完美! – nathanchere 2012-07-13 02:29:28

+0

偉大的項目!包括它在任何時間。 – 2013-06-04 05:45:19

+0

非常感謝@Kluyg – Itkrux 2015-10-22 05:47:13

0

問題是與第二行,說

<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
  • 選項1.刪除它在解析之前。
  • 選項2.閱讀 「XmlDocument.XmlResolver屬性」上的MSDN,並找出如何使XML文檔從XML中指定的URI下載,解析和使用DTD。