2010-10-25 23 views
5

Estoy tratando de leer mi historial de Apple Safari con C#, que está almacenado en un archivo plist, sin embargo siempre obtengo un error y no estoy seguro de cuál es la forma correcta de hacerlo hazlo. El código Traté de ejecutar es la siguiente:Analizando archivos .plist a XML simple C#

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

y siempre me sale el siguiente error: "Data at the root level is invalid. Line 1, position 1."

¿Alguien sabe cuál es incorrecto con este código y recomendar cuál es la mejor manera de leer archivos plist ?

Respuesta

2

probar esto y everyhing debe estar bien ;-)

xmd.Load(...) 

el que usted ha utilizado cargas de los datos XML de una cadena no desde un archivo.

+0

todavía me da el mismo error ... ¿tal vez las listas de apple serialze safari de alguna manera? – Oran

+0

1.) ¿Puede confirmar que el xml está bien formado? Intenta abrirlo con un editor xml. 2.) Asegúrate de que el archivo esté allí. 3.) Asegúrese de que no haya una línea en blanco antes del elemento raíz 4.) ¿Qué ocurre con la seguridad? ¿Tiene la aplicación el privilegio de abrir el archivo? (Tal vez cuando su aplicación es un servicio web o un sitio web, no tiene el privilegio) – Dennis

+0

1. no, no puedo abrirlo con un editor xml, sin embargo, se abre perfectamente con el editor plist ... – Oran

1

Un plist no tiene que ser XML. Hay cuatro métodos de serialización diferentes: antiguo (para NeXT, ya no se usa), XML, binario y JSON (nuevo en 10.7). Safari's History.plist es probablemente binario, por razones de eficiencia.

Si no me equivoco, Safari para Windows se envía con plutil.exe en Archivos Comunes \ Apple Application Support. Puede usar eso como plutil -convert xml1 SOME_FILE.plist para convertir su archivo.

12

Parece que Apple Safari history.plist es plist plist. He encontrado un gran proyecto:

https://github.com/animetrics/PlistCS

Desde el readme:

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

+0

¡¡¡Funciona perfecto !! – nathanchere

+0

¡Gran proyecto! Incluido en poco tiempo. –

+0

Muchas gracias @Kluyg – Itkrux

0

El problema está en la segunda línea, diciendo

<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
  • Opción 1. Quitar antes de analizar.
  • Opción 2. Lea el MSDN en "XmlDocument.XmlResolver Property" y descubra cómo hacer que el XmlDocument descargue, analice y use la DTD desde el URI especificado en el XML.