2009-07-02 27 views
5

Tôi có hai tệp xml (a.xml và b.xml) trong hệ thống tệp của tôi (iPhone). Bây giờ tôi muốn biết liệu các tệp này có chứa chính xác cùng một dữ liệu hay không. Hầu hết thời gian, sự so sánh này là đúng, bởi vì b.xml là kết quả của một hoạt động copyItemAtPath:. Trừ khi nó được ghi đè bởi thông tin mới hơn. Cách nào hiệu quả nhất để so sánh các tệp này?So sánh hai tệp xml trong Mục tiêu-C

  1. tôi có thể đọc nội dung của các tập tin như chuỗi và sau đó so sánh chuỗi
  2. tôi có thể phân tích các tập tin và so sánh một số yếu tố chính
  3. Tôi đoán có một cách rất thẳng thắn, rằng không cần phải diễn giải tệp, nhưng cho phép tôi so sánh ở cấp độ thấp hơn.

Bất kỳ đề xuất nào đều được hoan nghênh.

Cảm ơn trước

Sjakelien

Cập nhật:

tôi đã kết thúc làm điều này:

oldData = [NSData dataWithContentsOfFile:PathToAXML]; 
newData = [NSData dataWithContentsOfFile:PathToBXML]; 

và sau đó so sánh nó với:

[newData isEqualToData:oldData]; 

Các câu hỏi vẫn là: là hiệu quả hơn:

oldData = [NSString dataWithContentsOfFile:PathToAXML]; 
newData = [NSString dataWithContentsOfFile:PathToBXML]; 

[newData isEqualToString:oldData]; 

Trả lời

3

Một thay thế cho việc so sánh các nội dung tập tin là để theo dõi ngày sửa đổi tập tin - nếu nó là muộn hơn ngày mà bạn đã tạo bản sao, bạn có thể giả định rằng nó có đã được cập nhật.

Xem fileAttributesAtPath:traverseLink: trong lớp NSFileManager.

+0

Đó là cách để thực hiện. Và cũng khá hiệu quả, tôi đoán vậy. Tôi sẽ cần phải lưu trữ một nơi nào đó mặc dù. – Sjakelien

+0

Đây là IMO thay thế tốt. – Troggy

+0

Bạn không cần phải lưu trữ ngày ở một nơi khác nếu bạn bảo quản nó khi làm bản sao. Tôi nghĩ rằng NSFileManager có thể làm điều này. –

1
BOOL filesAreEqual = [[NSData dataWithContentsOfMappedFile:file1] isEqual:[NSData dataWithContentsOfMappedFile:file2]]; 
+0

Có vẻ thú vị. Tôi sẽ thử. – Sjakelien

+0

Có thể lấy danh sách các thẻ xml không khớp khỏi trình quản lý tệp không? –

+0

@SivaprasadKm No. FileManager hoạt động trên các tệp và byte. Nó không có khái niệm về XML hoặc nội dung có cấu trúc khác. –

5

Bạn cũng có thể sử dụng:

NSFileManager *filemgr = [NSFileManager defaultManager]; 

if ([filemgr contentsEqualAtPath:PathToAXML andPath:PathToBXML]) 
    NSLog (@"File contents match"); 
else 
    NSLog (@"File contents do not match"); 
+0

Có thể lấy danh sách các thẻ xml không khớp từ trình quản lý tệp không? –