如何使用simpleXML和php在具有特定id的节点中写入数据

时间:2013-11-28 02:44:31

标签: php xpath simplexml

我在这里发现了很多关于如何使用XPath获取具有指定id的节点,并使用SimpleXMLElement :: asXML写下数据。

但是可以使用XPath在具有特定id的节点中编写数据,而不是foreach方法吗?

这就是我所拥有的

<people>
    <person>
        ...
    </person>
    <person id="17">
        <name>John</name>
    </person>
    <person>
        ...
    </person>
</people>

我看起来像是:

$xml->person['id=17']->name = Bill;

$xml->xpath('/person[@id=17]')->name = Bill;

然后

$xml->asXML(data.xml);

1 个答案:

答案 0 :(得分:0)

正如@Passerby指出的那样,the ->xpath() method会返回一个数组,所以最简单的方法是使用foreachdemo)循环它:

$nodes=$xml->xpath('//person[@id=17]');
foreach($nodes as $node)
{
    $node->name="Bill";
}

这些对象都链接回原始的SimpleXML解析结构,因此将整个事物保存回XML将反映任何更改。

由于我们知道在这种情况下XPath的结果只有一个元素,修改$nodes[0]也有效 - 尽管要注意如果找到 no 节点会发生什么( demo):

$nodes=$xml->xpath('//person[@id=17]');
$nodes[0]->name="Bill";

最简洁的版本只适用于PHP 5.4,你可以直接在函数返回值上使用数组下标,将上面的内容压缩到一行 - 再次,只有在你确定找到元素时才使用它({ {3}}):

$xml->xpath('//person[@id=17]')[0]->name="Bill";