开发者

How can I move XML elements with PHP's SimpleXML?

开发者 https://www.devze.com 2023-01-08 06:17 出处:网络
How can I move an xml element elsewhere in a document? So I have this: <outer> <foo> <child name=\"a\"/>

How can I move an xml element elsewhere in a document? So I have this:

<outer>
    <foo>
        <child name="a"/>
        <child name="b"/>
        <child name="c"/>
    </foo>
    <bar />
</outer>

and want to end up with:

<outer>
    <foo />
    <bar>
        <child name="a"/>
        <child name="b"/>
        <child name="c"/>
    </bar>
</outer>

Using PHP's simpleXML.

开发者_开发问答Is there a function I'm missing (appendChild-like)?


You could make a recusrive function that clones the attributes and children. There is no other way to move the children with SimpleXML


class ExSimpleXMLElement extends SimpleXMLElement {
    //ajoute un object à un autre
    function sxml_append(ExSimpleXMLElement $to, ExSimpleXMLElement $from) {
        $toDom = dom_import_simplexml($to);
        $fromDom = dom_import_simplexml($from);
        $toDom->appendChild($toDom->ownerDocument->importNode($fromDom, true));
    }
}


    $customerXML = <<<XML
    <customer>
        <address_billing>
            <address_book_id>10</address_book_id>
            <customers_id>20</customers_id>
            <telephone>0120524152</telephone>
            <entry_country_id>73</entry_country_id>
        </address_billing>
        <countries>
            <countries_id>73</countries_id>
            <countries_name>France</countries_name>
            <countries_iso_code_2>FR</countries_iso_code_2>
        </countries>
    </customer>
    XML;

$customer = simplexml_load_string($customerXML, "ExSimpleXMLElement");
$customer->sxml_append($customer->address_billing, $customer->countries);

echo $customer->asXML();


    <?xml version="1.0"?>
    <customer>
        <address_billing>
            <address_book_id>10</address_book_id>
            <customers_id>20</customers_id>
            <telephone>0120524152</telephone>
            <entry_country_id>73</entry_country_id>
            <countries>
               <countries_id>73</countries_id>
               <countries_name>France</countries_name>
               <countries_iso_code_2>FR</countries_iso_code_2>
            </countries>
        </address_billing>
    </customer>
0

精彩评论

暂无评论...
验证码 换一张
取 消