解析.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数据从一个字符串不是从文件中的一个。
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.
作品完美! – nathanchere 2012-07-13 02:29:28
伟大的项目!包括它在任何时间。 – 2013-06-04 05:45:19
非常感谢@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。
它仍然给我同样的错误...也许苹果serialze safari的plists莫名其妙? – Oran 2010-10-25 15:25:27
1.)你能证实,这个xml格式良好吗?尝试用xml编辑器打开它。 2.)确保文件在那里。 3.)确保根元素之前没有空行4.)安全性如何?你有权限打开文件吗? (也许当你的应用程序是一个Web服务或网站,它没有特权) – Dennis 2010-10-26 05:38:37
1.不,我不能用一个XML编辑器打开它,但它与plist编辑器打开完美... – Oran 2010-10-27 10:15:41