Cómo arreglar XML «Apertura y cierre de la etiqueta de error de coincidencia»?

Estoy tratando de arreglar un archivo XML con miles de líneas que tienen el error:

Apertura y cierre de la etiqueta de error de coincidencia de

Yo estoy usando ahora simpleXML para analizar este archivo, así que antes de analizar con este librairie necesito arreglar el archivo XML:

Ahora estoy tratando con esta solución, pero no es suficiente:

libxml_use_internal_errors(true);
$xml = @simplexml_load_file($temp_name);
     $errors = libxml_get_errors();
     foreach ($errors as $error) {
         if (strpos($error->message, 'Opening and ending tag mismatch')!==false) {
             $tag   = trim(preg_replace('/Opening and ending tag mismatch: (.*) line.*/', '$1', $error->message));
             $lines = file($temp_name, FILE_IGNORE_NEW_LINES);
             $line  = $error->line+1;
             echo $line;
             echo "<br>";
             $lines[$line] = '</'.$tag.'>'.$lines[$line];
             file_put_contents($temp_name, implode("\n", $lines));
         }
     }

Alguna idea?

  • ¿Qué hacen los malos líneas parecen?
  • Suena más como el HTML de XML. Incluso si no lo es, una herramienta que analiza HTML podría ser más tolerante, ya que generalmente no se consideran un mal cerradas elemento como un error. <br> sin </br> es perfectamente válido HTML.

2 Kommentare

  1. 2

    Primero, si tienes datos corruptos, a continuación, fijar el programa que genera por lo general es más importante que la reparación de los datos.

    Si los únicos errores en el archivo no coinciden etiquetas de cierre, entonces es de suponer que la reparación de la estrategia es ignorar lo que está en el extremo de la etiqueta completamente, dado que el nombre que aparece en un extremo de la etiqueta XML es redundante. Usted podría encontrar que una herramienta existente como TagSoup o validador.nu se encarga de esto de la manera que usted desea; o usted podría encontrar que una herramienta de salidas XML que se puede transformar en la forma que usted desea. Esa es una perspectiva mejor que escribir su propio analizador de esta gramática XML.

  2. -1

    Creo que esta es la solución simple.

    Por favor verifique en su etiqueta final.

    Por ejemplo, esta debe ser la correcta.

    $xml.="</childelement>";

    Lugar de

    $xml.="<childelement/>";

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea