2011-02-17 23 views

Respuesta

2

Me he encontrado con este problema con las funciones DOMDoc y XSL de PHP. Básicamente, tienes que cargar el documento como XML. Esa es la única forma en que obtuve la etiqueta <video> para que funcione.

Actualización: También puede tratar de añadir elementos a la & entidades <!DOCTYPE html5 >, siempre y cuando $doc->resolveExternals = true.

+0

Pero luego tengo que use solo XML bien formado. :/ – Hamster

+0

Se supone que Html5 está bien formado: P Puede probar $ doc-> resolveExternals = true; y luego coloque las etiquetas html5 que necesita en ]>, DomDoc obedecerá a los tipos-doc –

+2

@James HTML5 no tiene que estar bien formado XML. Aún puede usar etiquetas de cierre automático sin el '/>', por ejemplo '' – Phil

1

No sé si has probado la biblioteca en última instancia, señaló que en esta respuesta:

DOM parser that allows HTML5-style </ in <script> tag

Html5lib resuelto el mismo problema que estás teniendo para mí (que era el <aside> y <nav> etiquetas que desencadenan mis problemas)

Estaba usando esto para analizar fragmentos html, y la ventaja es que era un reemplazo directo para DOMDocument, ya que actualmente usa DOMDocument como el objeto de salida, por lo que no se rompió ninguna otra funcionalidad en mi implementación.

Hay una nota en la documentación de que están buscando alejarse de DOMDocument en el futuro.

html5lib para PHP se puede encontrar aquí: http://code.google.com/p/html5lib/downloads/detail?name=html5lib-php-0.1.tar.gz&can=2&q=

En el answer linked to above, hay más detalles sobre su uso.

1

tratar de ignorar el error:

En mis casos, tengo varios "widgets" en varios archivos que actúa como plantillas. Por ejemplo: template_header.html template_footer.html

<?php 
//Load header 
$dom = new DOMDocument(); 
@$dom->loadHTMLFile('template_header.html'); 
$xpath = new DOMXpath($dom); 
$nodelist = $xpath->query('div[class="template-widget"]'); 
foreach($nodelist as $node){ 
    echo $dom->saveHTML($node); 
} 
?> 

Tenga en cuenta que $ dom-> loadhtmlfile tiene y '@' a ognore el error.

Cuestiones relacionadas