2010-10-25 34 views
5

Tôi đang cố gắng đọc lịch sử Apple Safari của mình bằng C#, được lưu trữ trong tệp plist, tuy nhiên tôi luôn gặp lỗi và tôi không chắc cách nào đúng là làm đi. Mã Tôi cố gắng để thực hiện là:Phân tích cú pháp tệp .plist thành XML đơn giản C#

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

và tôi luôn luôn nhận được lỗi sau: "Data at the root level is invalid. Line 1, position 1."

Có ai biết whats sai với mã này và khuyên cách tốt nhất để đọc các file plist là gì ?

Trả lời

2

thử này và everyhing nên được tốt ;-)

xmd.Load(...) 

Một bạn đã sử dụng tải dữ liệu xml từ một chuỗi chứ không phải từ một tập tin.

+0

nó vẫn mang lại cho tôi lỗi tương tự ... có thể sê-ri của sê-ri safari bằng cách nào đó? – Oran

+0

1.) Bạn có thể xác nhận rằng xml được tạo đúng không? Hãy thử mở nó bằng trình chỉnh sửa xml. 2.) Hãy chắc chắn rằng các tập tin có. 3.) Đảm bảo không có dòng trống trước phần tử gốc 4.) Bảo mật là gì? Bạn có ứng dụng đặc quyền để mở tệp không? (Có thể khi ứng dụng của bạn là một dịch vụ web hoặc trang web không có đặc quyền) – Dennis

+0

1. không, tôi không thể mở nó bằng trình chỉnh sửa xml, tuy nhiên nó mở ra hoàn hảo với trình chỉnh sửa plist ... – Oran

1

Một plist không phải là XML. Có bốn phương thức tuần tự hóa khác nhau - kiểu cũ (cho NeXT; không còn được sử dụng), XML, nhị phân và JSON (mới trong 10.7). History.plist của Safari rất có thể là nhị phân, vì lý do hiệu quả.

Nếu tôi không nhầm lẫn, Safari dành cho Windows sẽ xuất xưởng với plutil.exe trong Tệp phổ biến \ Hỗ trợ ứng dụng của Apple. Bạn có thể sử dụng nó như plutil -convert xml1 SOME_FILE.plist để chuyển đổi tệp của mình.

12

Dường như Apple Safari history.plist là dạng nhị phân. Tôi đã tìm thấy một dự án lớn:

https://github.com/animetrics/PlistCS

Từ readme:

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

+0

Hoạt động hoàn hảo !! – nathanchere

+0

Dự án tuyệt vời! Bao gồm nó trong thời gian không. –

+0

Cảm ơn rất nhiều @Kluyg – Itkrux

0

Vấn đề là với dòng thứ hai, nói

<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
  • Lựa chọn 1. Remove trước khi phân tích cú pháp.
  • Tùy chọn 2. Đọc MSDN trên "XmlDocument.XmlResolver Property" và tìm hiểu cách làm cho tải xuống XmlDocument, phân tích cú pháp và sử dụng DTD từ URI được chỉ định trong XML.
Các vấn đề liên quan