解析.plist文件为普通XML C#

问题描述:

我试图用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文件的最好方法?

试试这个,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

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来转换你的文件。

它看起来像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

问题是与第二行,说

<!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。