2009-07-02 11 views
5

Ho due file xml (a.xml e b.xml) nel mio file system (iPhone). Ora voglio sapere se questi file contengono esattamente gli stessi dati. Il più delle volte, questo confronto sarebbe vero, perché b.xml è il risultato di un copyItemAtPath: operation. A meno che non venga sovrascritto dalle nuove informazioni. Quale sarebbe il modo più efficiente per confrontare questi file?Confronto di due file xml in Objective-C

  1. ho potuto leggere il contenuto dei file come stringhe e quindi confrontare le stringhe
  2. ho potuto analizzare i file e confrontare alcuni elementi chiave
  3. Credo che ci sia un modo molto schietto, che non bisogno di interpretare il file, ma mi permette di confrontare su un livello inferiore.

Qualsiasi suggerimento è molto gradito.

Grazie a venire

Sjakelien

Aggiornamento:

ho finito per fare questo:

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

e poi confrontarlo con:

[newData isEqualToData:oldData]; 

Il domanda è ancora: è che più efficiente di:

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

[newData isEqualToString:oldData]; 

risposta

3

Un'alternativa al confronto tra il contenuto del file è quello di replicare la data di modifica del file - se è successiva alla data di creazione della copia, si potrebbe supporre che essa ha stato aggiornato

Vedere fileAttributesAtPath:traverseLink: nella classe NSFileManager.

+0

Questo è un modo per farlo. E abbastanza efficiente, immagino. Dovrò comunque archiviarlo da qualche parte. – Sjakelien

+0

Questa è una buona alternativa IMO. – Troggy

+0

Non è necessario memorizzare la data da qualche altra parte se la si conserva durante la copia. Penso che NSFileManager possa farlo. –

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

Sembra interessante. Lo proverò. – Sjakelien

+0

È possibile ottenere l'elenco dei tag xm non corrispondenti da file manager? –

+0

@SivaprasadKm No. FileManager funziona su file e byte. Non ha idea di XML o altri contenuti strutturati. –

5

si potrebbe anche usare:

NSFileManager *filemgr = [NSFileManager defaultManager]; 

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

È possibile ottenere l'elenco di tag xm non corrispondenti da file manager? –