【问题标题】:Save changes in foreach cycle?保存 foreach 循环中的更改?
【发布时间】:2016-02-07 20:20:42
【问题描述】:

假设以下 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 文件所有部分中的一些特定字母 - 例如bar 的所有外观都应替换为 foo... 感谢这个伟大的社区,我知道它可以使用这样的循环:

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

问题是,如果我现在去,例如到 $inhalt->shortinfo 它没有工作艰难...

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

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

然后替换显然有效,但不幸的是,当 forech 循环完成时,更改会丢失; 我怎样才能避免这种情况? 非常感谢!! :)

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

【问题讨论】:

标签: php xml object foreach


【解决方案1】:

关于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();

注意foreach 循环中的自引用$child[0]
这种技术有几个很好解释的答案,请参阅Remove a child with a specific attribute, in SimpleXML for PHP

查看上面的代码:https://eval.in/464546

【讨论】:

    猜你喜欢
    • 2012-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-01
    • 1970-01-01
    相关资源
    最近更新 更多