2009-07-02 13 views
5

Tengo dos archivos xml (a.xml y b.xml) en mi sistema de archivos (iPhone). Ahora quiero saber si estos archivos contienen exactamente los mismos datos. La mayoría de las veces, esta comparación sería verdadera, porque b.xml es el resultado de una operación copyItemAtPath :. A menos que se sobrescriba con información más reciente. ¿Cuál sería la forma más eficiente de comparar estos archivos?Comparación de dos archivos xml en Objective-C

  1. pude leer el contenido de los archivos como cadenas y luego comparar las cadenas
  2. pude analizar los archivos y comparar algunos elementos clave
  3. supongo que hay una manera muy contundente, que no lo hace Necesito interpretar el archivo, pero me permite compararlo en un nivel inferior.

Cualquier sugerencia es bienvenida.

Gracias por delante

Sjakelien

Actualización:

que terminé haciendo esto:

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

y luego compararlo con:

[newData isEqualToData:oldData]; 

El pregunta sigue siendo: es que más eficiente que:

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

[newData isEqualToString:oldData]; 

Respuesta

3

Una alternativa a comparar el contenido del archivo es realizar un seguimiento de la fecha de modificación del archivo - si es más tarde de la fecha de creación de la copia, es posible asumir que tiene sido actualizado

Consulte fileAttributesAtPath:traverseLink: en la clase NSFileManager.

+0

Esa es una manera de hacerlo. Y bastante eficiente también, supongo. Sin embargo, tendré que guardar eso en algún lado. – Sjakelien

+0

Esta es una buena alternativa de IMO. – Troggy

+0

No tiene que guardar la fecha en otro lugar si la conserva al hacer la copia. Creo que NSFileManager puede hacer esto. –

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

Parece interesante. Lo probaré. – Sjakelien

+0

¿Es posible obtener la lista de etiquetas xml no coincidentes desde el administrador de archivos? –

+0

@SivaprasadKm No. FileManager funciona en archivos y bytes. No tiene noción de XML u otro contenido estructurado. –

5

también es posible usar:

NSFileManager *filemgr = [NSFileManager defaultManager]; 

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

¿Es posible obtener la lista de etiquetas xml no coincidentes desde el administrador de archivos? –

Cuestiones relacionadas