0

2つのXML文字列があります。

$xml = '<?xml version="1.0" encoding="utf-8"?>
<album type="basic" shape="square" orientation="vertical">
    <page width="414" height="414" type="frontCover">
        <sbackground color="0xFFFFFF" locked="false" />
        <pbackground source="" rotation="none" x="0" y="0" width="0" height="0" locked="false" />
        <images/>
        <frame source="" rotation="none" locked="false" />
        <shapes/>
        <texts/>
    </page>

    <page width="414" height="414" type="backCover" useEntirePage="true">
        <sbackground color="0xFFFFFF" locked="false" />
        <pbackground source="" rotation="none" x="0" y="0" width="0" height="0" locked="false" />
        <images/>
        <frame source="" rotation="none" locked="false" />
        <texts/>
        <shapes/>
    </page>
</album>';

$replaceXml = '<?xml version="1.0" encoding="utf-8"?>
<album type="savedCard" sides="double" shape="square" orientation="vertical">
    <page width="414" height="414" type="frontCover" useEntirePage="true" >
        <sbackground color="0xFFFFFF" />
        <pbackground source="/images/1-2800-1860-1358622465873.jpg" rotation="none" x="-108.9" y="0" width="648.82" height="431" transparency="1" flipped="false" mask_frame_name="" />
        <images>
        </images>
        <frame source="" />
        <shapes>
        </shapes>
        <texts>
        </texts>
    </page>
    <page width="414" height="414" type="leftPage" useEntirePage="true" >
        <sbackground color="0xCBCBFF" />
        <pbackground source="" rotation="none" x="0" y="0" width="0" height="0" transparency="1" flipped="false" mask_frame_name="" />
        <images>
        </images>
        <frame source="" />
        <shapes>
        </shapes>
        <texts>
        </texts>
    </page>
</album>';

次に行う必要があります。最初のXMLのノードの1つを、2番目のノードの同じノードの値に置き換えます。

$xmlの最初のページノードを$replaceXmlの最初のページノードに置き換える必要があります。だから私は交換後にこれを持っている必要があります:

$xml = '<?xml version="1.0" encoding="utf-8"?>
<album type="basic" shape="square" orientation="vertical">
    <page width="414" height="414" type="frontCover" useEntirePage="true" >
        <sbackground color="0xFFFFFF" />
        <pbackground source="/images/1-2800-1860-1358622465873.jpg" rotation="none" x="-108.9" y="0" width="648.82" height="431" transparency="1" flipped="false" mask_frame_name="" />
        <images>
        </images>
        <frame source="" />
        <shapes>
        </shapes>
        <texts>
        </texts>
    </page>

    <page width="414" height="414" type="backCover" useEntirePage="true">
        <sbackground color="0xFFFFFF" locked="false" />
        <pbackground source="" rotation="none" x="0" y="0" width="0" height="0" locked="false" />
        <images/>
        <frame source="" rotation="none" locked="false" />
        <texts/>
        <shapes/>
    </page>
</album>';

これを行うための最良の方法は何ですか?

次のアプローチを試しました

$xml = simplexml_load_string($xml);
$replaceXml = simplexml_load_string($replaceXml);
$xml->page[0] = $replaceXml->page[0];

でも、必要なものが手に入らないので、間違っているようです。

4

1 に答える 1

0

私はこれを行う方法を見つけました:

最初のページを置き換える必要があるとします

$pageNum = 0;

$xmlDoc = new DOMDocument();
$xmlDoc->loadXML($xml);

$replace = new DOMDocument();
$replace->loadXML($replaceXml);

$newNode = $replace->getElementsByTagName('page')->item($pageNum);
$oldNode = $xmlDoc->getElementsByTagName('page')->item($pageNum);

$newNode = $xmlDoc->importNode($newNode, true);
$oldNode->parentNode->replaceChild($newNode, $oldNode);

$xmlDoc->saveXML();

必要に応じて動作します

于 2013-02-23T16:25:08.820 に答える