Frage

Ich habe dieses SimpleXMLElement Objekt mit einer XML-Einrichtung ähnlich den folgenden ...

$xml = <<<EOX
<books>
    <book>
        <name>ABCD</name>
    </book>
</books>
EOX;

$sx = new SimpleXMLElement( $xml );

Jetzt habe ich eine Klasse mit dem Namen Buch, das Information enthält. zu jedem Buch. Die gleiche Klasse kann auch das Buch Informationen ausspucken. im XML-Format verwendet, die den oben (der verschachtelte Block) .. Beispiel:

$book = new Book( 'EFGH' );
$book->genXML();

... will generate
<book>
    <name>EFGH</name>
</book>

Nun, durch die einen Weg, um herauszufinden, ich versuche ich diesen XML-Block erzeugte verwenden kann, und fügen Sie als Kind so, dass es jetzt wie ... zum Beispiel sieht ..

// Non-existent member method. For illustration purposes only.
$sx->addXMLChild( $book->genXML() );    

...XML tree now looks like:
<books>
    <book>
        <name>ABCD</name>
    </book>
    <book>
        <name>EFGH</name>
    </book>
</books>

Aus welcher Dokumentation ich habe auf SimpleXMLElement lesen, addChild () nicht, dies für Sie erledigen, da es keine XML-Daten als Variablenwert unterstützen.

War es hilfreich?

Lösung

Zwei Lösungen. Erstens, Sie tun es mit Hilfe von libxml / DOMDocument / SimpleXML: Sie $sx Objekt importieren müssen DOM , eine DOMDocumentFragment erstellen und verwenden DOMDocumentFragment::appendXML()

$doc = dom_import_simplexml($sx)->ownerDocument;

$fragment = $doc->createDocumentFragment();     
$fragment->appendXML($book->genXML());
$doc->documentElement->appendChild($fragment);

// your original $sx is now already modified.

Siehe Online Demo .

Sie können auch von SimpleXMLElement erweitern und eine Methode hinzufügen, die diese zur Verfügung stellt. Dieses spezielle Objekt verwenden, dann würde es ermöglichen Ihnen folgende leicht zu erstellen:

$sx = new MySimpleXMLElement($xml);

$sx->addXML($book->genXML());

Eine andere Lösung ist eine XML-Bibliothek zu verwenden, die bereits über diese Funktion verfügt eingebaute in wie SimpleDOM . Sie greifen SimpleDOM und Sie InsertXML (), die wie die addXMLChild () Methode funktioniert, wie Sie wurden zu beschreiben.

include 'SimpleDOM.php';

$books = simpledom_load_string(
    '<books>
        <book>
            <name>ABCD</name>
        </book>
    </books>'
);

$books->insertXML(
    '<book>
        <name>EFGH</name>
    </book>'
);

Andere Tipps

Haben Sie einen Blick auf meinem Code:

$doc = new DOMDocument();       
$doc->loadXML("<root/>");       

$fragment = $doc->createDocumentFragment();     
$fragment->appendXML("<foo>text</foo><bar>text2</bar>");
$doc->documentElement->appendChild($fragment);

echo $doc->saveXML();

Dies ändert das XML-Dokument durch ein XML-Fragment hinzugefügt wird. Online Demo .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top