繁体   English   中英

将.plist文件解析为纯XML C#

[英]Parsing .plist Files to plain XML C#

我正在尝试使用c#来读取我的Apple Safari历史记录,该文件存储在plist文件中,但是我总是遇到错误而且我不确定正确的方法是什么。 我试图执行的代码是这样的:

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文件的最佳方法是什么?

看起来Apple Safari history.plist是二进制plist。 我找到了一个很棒的项目:

https://github.com/animetrics/PlistCS

从自述文件:

这是一个C#Property List(plist)序列化库(MIT许可证)。 它支持plist格式的XML和二进制版本。

试试这个,每次都很好;-)

xmd.Load(...)

您使用的那个加载来自字符串而不是文件的xml数据。

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

如果我没弄错的话,Safari for Windows确实plutil.exe了Common Files \\ Apple Application Support中的plutil.exe 您可以使用plutil -convert xml1 SOME_FILE.plist来转换文件。

问题出在第二行,说

<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
  • 选项1.在解析之前将其删除。
  • 选项2.阅读“XmlDocument.XmlResolver属性”上的MSDN,并找出如何使XmlDocument从XML中指定的URI下载,解析和使用DTD。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM