Cela ressemble à une question assez facile à répondre, mais je n'ai pas pu le faire fonctionner. Je cours PHP 5.2.6.
J'ai un élément DOM (l'élément racine) qui, quand je vais à $ element-> sauvegardxml (), il diffuse un attribut XMLNS: P>
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <html xmlns="http://www.w3.org/1999/xhtml" lang="en"> ...
3 Réponses :
avec PHP 5.2.6 J'ai trouvé 2 façons de cela: impression p> espère que ce que vous avez demandé. :) p> p>
Merci de votre réponse - cela ne résout pas mon problème mais m'incline que cela semble être quelque chose de particulier à des documents chargés de LoadHTML () plutôt que de LoadXML () car votre exemple fonctionne avec LoadXML (). On dirait que LoadHTML crée des documents avec un "espace de noms invisible" qui ne peut pas être lu à l'aide de méthodes DOM mais qui apparaît lorsque vous sauvegardez ().
Je ne suis pas sûr de pouvoir vous suivre à 100% mais que vous chargez quelque chose avec LoadHTML et le redémarrez via Sauvegingxml n'ajoute pas de XMLNS pour moi. Il ajoute simplement / conserve un doctype à partir du HTML. Peut-être que si vous pouvez fournir un peu de script de reproduction à côté de la sortie que vous voulez, je peux creuser plus profondément
Intéressant - ça fait parfois et parfois pas. Si votre document HTML d'entrée a un document XHTML DOCTYPE, il le fait. Il le fera pour cette entrée: w3.org/tr/xhtml1/dtd/xhtml1-truct.dtd ">
Je n'ai aucune idée de la façon dont vous détecteriez cela dans un DOM.
Eh bien, vous pouvez le faire avec une fonction comme celle-ci: Donc, vous le nourrissez un doméploiement, puis il trouve tous les espaces de noms associés: P> array(2) {
[0]=>
string(28) "http://www.w3.org/1999/xhtml"
[3]=>
string(22) "http://example.com/bar"
}
Comme Edorian déjà montré , obtenir l'espace de noms fonctionne bien lorsque le balisage est chargé avec produira des résultats vides. Mais vous pouvez utiliser xpath p> et pour le corps p> ou avec noeud de contexte p> Mon hypothèse sans éducation est qu'à l'intérieur, un document HTML est différent du document réel em>. libxml utilise un module différent pour analyser HTML et le DOMDocument lui-même sera de Un NodeType différent, comme vous pouvez simplement vérifier en faisant p> avec 13 étant un loadxml code>. Mais vous avez raison que cela ne fonctionne pas pour le balisage chargé avec
loadhtml code>:
xml_html_document_node code>
. p> p> p>
Très bien et détaillé, je ne connaissais pas les Nodeypes en fonction de la méthode d'analyse, mais cela a du sens
Merci pour l'indice des Nodeypes et la capacité d'utiliser XPath - résout beaucoup de mes problèmes!