So importieren Sie XML-string in ein php-DOMDocument-Objekt
Zum Beispiel, ich erstelle eine DOMDocument
so :
<?php
$implementation = new DOMImplementation();
$dtd =
$implementation->createDocumentType
(
'html', //qualifiedName
'-//W3C//DTD XHTML 1.0 Transitional//EN', //publicId
'http://www.w3.org/TR/xhtml1/DTD/xhtml1-'
.'transitional.dtd' //systemId
);
$document = $implementation->createDocument('', '', $dtd);
$elementHtml = $document->createElement('html');
$elementHead = $document->createElement('head');
$elementBody = $document->createElement('body');
$elementTitle = $document->createElement('title');
$textTitre = $document->createTextNode('My bweb page');
$attrLang = $document->createAttribute('lang');
$attrLang->value = 'en';
$document->appendChild($elementHtml);
$elementHtml->appendChild($elementHead);
$elementHtml->appendChild($attrLang);
$elementHead->appendChild($elementTitle);
$elementTitle->appendChild($textTitre);
$elementHtml->appendChild($elementBody);
So, jetzt, wenn ich einige xhtml-string so :
<?php
$xhtml = '<h1>Hello</h1><p>World</p>';
Wie kann ich es importieren in die <body>
Knoten meiner DOMDocument
?
Für jetzt, die einzige Lösung, die ich gefunden habe, ist sowas :
<?php
$simpleXmlElement = new SimpleXMLElement($xhtml);
$domElement = dom_import_simplexml($simpleXmlElement);
$domElement = $document->importNode($domElement, true);
$elementBody->appendChild($domElement);
Diese Lösung scheint sehr schlimm für mich, und erstellen Sie einige problemes, wie wenn ich versuche mit einem string wie :
<?php
$xhtml = '<p>Hello World</p>';
Ok, ich kann dieses problem umgehen, durch die Umwandlung von xhtml-Entitäten in Unicode-Entitäten, aber es ist so hässlich...
Hilfe ?
Dank im Voraus !
Verwandte Frage :
DOMDocument::validate()
problem (gelöst)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das problem ist DOM nicht kennt, der sollte es sich überlegen die XHTML-DTD, es sei denn, Sie validiert das Dokument gegen ihn. Es sei denn, Sie tun, dass DOM nicht weiß, Entitäten in der DTD definierten, noch sonstige Regeln es. Zum Glück haben wir aussortiert, wie man die Validierung in der anderen Frage, so bewaffnet mit diesem wissen können Sie tun
Und importieren Sie dann mit
Ausgänge:
Den anderen Weg zum importieren von XML in ein anderes DOM ist die Verwendung
Ausgänge:
Jedoch, das kann nicht funktionieren mit
weil, wenn Sie laden Sie ein Dokument in DOM, DOM überschreibt alles, was Sie sagte, bevor über das Dokument. Also, wenn mit Last, libxml (und damit SimpleXml, DOM-und XMLReader -) tut (tun) nicht wissen, dass Sie XHTML. Und es kennt keine definierten Entitäten in es und fuzz über Sie statt. Aber selbst wenn der string würde nicht enthalten, dass die Person, es ist kein gültiges XML, da es fehlt ein root-Knoten. Das ist, warum Sie verwenden das fragment.
Können Sie eine DomDocumentFragment für diese:
Das ist alles dort ist zu ihm...
Edit: Gut, wenn Sie xhtml (anstelle von gültigen xml), Sie könnten dies tun dirty workaround:
Verwendung: