保存foreach循环中的变化?

时间:2015-11-06 16:12:29

标签: php xml object foreach

假设以下xml文档:

<?xml version="1.0"?>
<technicaldata template="123">
    <name>
        <![CDATA[Blub1]]>
    </name>
    <numbers>
        <![CDATA[1
            2
            3
            4
        5]]>
    </numbers>
    <shortinfo>
        <![CDATA[ha ha ha ha ha ha ha ha.]]>
    </shortinfo>
    <detailedinfo>
        <![CDATA[hi hi hi hi hi hi hi hi hi hi hi hi hi hi hi hi hi hi hi hi
        hi hi hi hi hi hi hi hi hi hi hi hi hi hi hi hi hi hi hi hi hi hi ]]>
    </detailedinfo>
</technicaldata>

现在我可以通过simplexml加载文件;

$data='test.xml';
$inhalt = simplexml_load_file($data);

之后我想替换xml文件的所有部分中的一些特定字母 - 例如酒吧的所有外观都应该被foo取代...... 感谢这个伟大的社区,我知道它可以像这样循环:

foreach ($inhalt->children() as $child) {
    $child= str_ireplace('bar', 'foo',$child);
}

问题是,如果我现在去,例如至 $ inhalt-&gt; shortinfo它不起作用......

但是如果我使用带有这样的回声的循环

foreach ($inhalt->children() as $child) {
    $child= str_ireplace('bar', 'foo',$child);
    echo $child;
}

然后替换明显起作用,但不幸的是,当前环循环结束时,变化会丢失; 我怎么能避免这种情况? 非常感谢!! :)

编辑:对不起,我说的是php ...:)

1 个答案:

答案 0 :(得分:1)

关于aggregate隐藏的权力已经说了很多,这里有怎么做:

SimpleXml

请注意$inhalt = simplexml_load_string($x); // assume XML in $x foreach ($inhalt->children() as $child) { $child[0] = str_ireplace('bar', 'foo', $child); } echo $inhalt->asXML(); 循环中的自引用$child[0]
这项技术有几个很好解释的答案,请参阅Remove a child with a specific attribute, in SimpleXML for PHP

请参阅上面的代码:https://eval.in/464546