【问题标题】:PHP's SimpleXML doesn't save edited dataPHP 的 SimpleXML 不保存编辑的数据
【发布时间】:2011-04-14 08:53:31
【问题描述】:

我正在尝试编辑一些 xml 数据。在此之后,我想将数据保存到文件中。

问题是simplexml没有保存编辑的数据而是节点发生了变化。

$spieler = $xml->xpath("/planer/spieltag[@datum='" .$_GET['date']. "']/spielerliste/spieler");

for ( $i = 1; $i < 13; $i++ ){
    if (!empty($_POST['spieler' .$i ])){
        $spieler[$i-1] = $_POST['spieler' .$i];
    }
}
var_dump($spieler);
$xml->asXML("data.xml");

var_dump() 显示新数据,但 asXML() 不显示。

【问题讨论】:

    标签: php xml simplexml


    【解决方案1】:

    确保您的脚本对data.xml具有写入权限

    【讨论】:

    • 您正在将节点添加到内存字符串中。
    【解决方案2】:

    XPath 结果数组元素不是 PHP ($ref = &amp;$var) 对实际树节点的引用,所以这一行

        $spieler[$i-1] = $_POST['spieler' .$i];
    

    没有修改树中的任何内容,您只是覆盖了一个完全独立的数组中的条目。

    【讨论】:

    • 好的,谢谢。那么如何改变树呢?我知道例如 '$xml->element[0] = "foo"' 是可能的,但这不是很漂亮,因为我需要选择具有属性值的节点。
    • 使用完整的 DOM 可能会更好,并将 ::replaceChild() 与更新的数据一起使用。自己没有使用过 SimpleXML,但是返回的 xpath 结果中肯定有一些东西,才能弄清楚结果来自树的哪个位置。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-08
    • 1970-01-01
    • 1970-01-01
    • 2013-11-19
    相关资源
    最近更新 更多