Как изменить значение cdata внутри a.xml файл, а затем снова сохраните его с помощью php


Я хочу просто изменить ABCD, записанный внутри cdata data.xml файл с новым значением, содержащимся в $change с помощью php. я могу получить все значения cdata, используя следующий код, но не знаю, как его изменить и сохранить.

<?php
$doc = new DOMDocument();
$doc->load('data.xml');
$destinations = $doc->getElementsByTagName("text");
foreach ($destinations as $destination) {
    foreach($destination->childNodes as $child) {
        if ($child->nodeType == XML_CDATA_SECTION_NODE) {
            echo $child->textContent . "<br/>";
        }
    }
}
?>

Мой data.xml файл.

<?xml version="1.0" encoding="utf-8"?>
<data displayWidth="" displayHeight="" frameRate="" fontLibs="assets/fonts/Sansation_Regular.swf">
    <preloader type="snowflake" size="40" color="0xffffff" shapeType="circle" shapeSize="16" numShapes="8"/>
        <flipCard openingDuration="2" openCardZ="400" tweenMethod="easeOut" tweenType="Back">
            <video videoPath="video.MP4" frontImage="assets/christmas/front.jpg" videoPoster="assets/christmas/videoPoster.jpg" videoFrame="assets/christmas/videoFrame.png" bufferTime="10" loopVideo="true"/>
            <flips backImage="assets/christmas/back.jpg" backColor="0x808080">

            <flip isText="true" xPos="600" yPos="470" openDelay="8" openDuration="2" tweenMethod="easeOut" tweenType="Elastic" action="link" url="http://activeden.net/">
                <text id="name" font="Sansation_Regular" embedFonts="true" size="40" color="0x802020"><![CDATA[ABCD]]></text>
            </flip>

            <flip isText="true" xPos="300" yPos="30" openDelay="2" openDuration="2" tweenMethod="easeOut" tweenType="Elastic">
                <text font="Sansation_Regular" embedFonts="true" size="80" color="0x202020"><![CDATA[HAPPY]]></text>
            </flip>
        </flips>
    </flipCard>
</data>
Author: shubh jaiswal, 2014-12-31

2 answers

Вы изменяете текст внутри раздела CDATA, устанавливая nodeValue этого узла CDATA ( Domcdatasection в PHP):

$child->nodeValue = $change;

Вывод (выдержка и упрощение):

    ...
        <flip isText="true" xPos="600" yPos="470" openDelay="8" openDuration="2" tweenMethod="easeOut" tweenType="Elastic" action="link" url="http://activeden.net/">
            <text id="name" ... color="0x802020"><![CDATA[changed ABCD]]></text>
        </flip>

        <flip isText="true" xPos="300" yPos="30" openDelay="2" openDuration="2" tweenMethod="easeOut" tweenType="Elastic">
            <text font="Sansation_Regular" ... ><![CDATA[changed HAPPY]]></text>
        </flip>

    ...

Что касается вашего второго вопроса о том, как сохранить документ: Способ сохранения XML-документа заключается в следующем DOMDocument::save:

$filename = '/path/to/file.xml';
$doc->save($filename);
 3
Author: hakre, 2014-12-31 10:12:40

Ответ от @Hakre правильный. просто хочу обновить окончательный рабочий код, потому что следующий код обновит только мое значение ABCD, а не все.

<?php
$doc = new DOMDocument();
$xml='data.xml';
$doc->load($xml);
$destinations = $doc->getElementsByTagName("text");
foreach ($destinations as $destination) {
    foreach($destination->childNodes as $child) {
        if ($child->nodeType == XML_CDATA_SECTION_NODE) {
            echo $child->textContent . "<br/>";
            $child->nodeValue = "new value";
        }
    }break;
}
$doc->save($xml);
?>
 1
Author: shubh jaiswal, 2014-12-31 10:50:58