Разбор файлов .plist в обычный XML C # - PullRequest
7 голосов
/ 25 октября 2010

Я пытаюсь прочитать мою историю Apple Safari с помощью c #, которая хранится в файле 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?

Ответы [ 4 ]

13 голосов
/ 09 февраля 2012

Похоже, что Apple Safari history.plist является бинарным списком. Я нашел отличный проект:

https://github.com/animetrics/PlistCS

Из файла readme:

Это библиотека сериализации списка свойств (plist) C # (MIT) лицензия). Он поддерживает как XML, так и двоичные версии plist формат.

2 голосов
/ 25 октября 2010

попробуйте это и все должно быть в порядке; -)

xmd.Load(...)

Тот, который вы использовали, загружает данные xml из строки, а не из файла.

1 голос
/ 05 ноября 2011

Плист не должен быть XML.Существует четыре различных метода сериализации - старый стиль (для NeXT; больше не используется), XML, двоичный код и JSON (новый в 10.7).Safari History.plist, скорее всего, является двоичным по соображениям эффективности.

Если я не ошибаюсь, Safari для Windows поставляется с plutil.exe в Common Files \ Apple Application Support.Вы можете использовать это как plutil -convert xml1 SOME_FILE.plist для конвертации вашего файла.

0 голосов
/ 28 августа 2012

Проблема во второй строке:

<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
  • Вариант 1. Удалите его перед анализом.
  • Вариант 2. Читать MSDN на «Свойство XmlDocument.XmlResolver» и выясните, как сделать XmlDocument загружает, анализирует и использует DTD из URI, указанного в XML.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...