Una forma de solucionar este problema es a patch libxml2.
Remitiéndose al código fuente de libxml2.9.2 (https: //git.gnome.org/browse/libxml2/tree/?id=v2.9.2), en SAX2.c (https: //git.gnome .org/browse/libxml2/tree/SAX2.c? id = v2.9.2) (el analizador interno de SAX utilizado para crear el árbol DOM) en la línea 1699 los atributos con xmlns no se analizan cuando están en modo HTML, y se analizan como cualquier otro atributo en la línea y 1740. En consecuencia, tiene sentido ajustar la línea 1622, que divide el nombre en prefijo y parte local. Cambio:
name = xmlSplitQName(ctxt, fullname, &prefix);
en
if (!ctxt->html) {
name = xmlSplitQName(ctxt, fullname, &prefix);
} else {
name = xmlStrdup(fullname);
prefix = NULL;
}
Entonces libxml2 consideraremos etiquetas como <o:p>
a ser para los elementos con nombre o:p
, es decir, el colon está incluido en el nombre del elemento con ningún significado especial. Esta es la interpretación correcta en HTML. Por ejemplo, the HTML5 specification says:
En la sintaxis HTML, los prefijos de espacio de nombres y declaraciones de espacios no tienen el mismo efecto que en XML. Por ejemplo, los dos puntos no tienen un significado especial en los nombres de los elementos HTML.
Esperemos que este cambio sea aprobado para una versión futura de libxml2. Hay un informe de error abierto (https: //bugzilla.gnome.org/show_bug.cgi?id=654146).
HTML no tiene espacios de nombres. Bienvenido a las consecuencias de expandir elementos. Si es XHTML + FBML (en lugar de HTML + FBML), entonces podría usar un analizador XML. – Quentin
Lo habría hecho, si fuera XML. El punto de los analizadores de HTML resilientes es que hacen el trabajo. Aunque tampoco me gustan estos nombres de etiquetas mágicas, creo que es razonable esperar de lxml para conservarlos. Trataré de hablar con los mantenedores para ver si esto puede ser acomodado. –