如何通过属性修改 XML 节点

How to modify a XML node by attribute

$xmlStr = '<?xml version="1.0" encoding="utf-8"?>
<players>
    <string name="Paul">Foo</string>
    <string name="Peter">Bar</string>
</players>';

$xml = new SimpleXML($xmlStr);

如何在 SimpleXML 对象中将 Foo 更改为 Baobab(不使用 PHP 循环)?

当你像你说的那样使用 XPath 时 returns 一个数组。由于这是您要更改的第一项,因此请使用 [0].

要更新值,你必须让 SimpleXML 知道你想设置元素的值,最简单的方法是使用(在本例中)是 $foo[0].虽然 $foo 不是数组,但它会欺骗 SimpleXML 来设置元素的值,而不是将值分配给名为 $foo.

的变量
$xmlStr = '<?xml version="1.0" encoding="utf-8"?>
<players>
    <string name="Paul">Foo</string>
    <string name="Peter">Bar</string>
</players>';

$xml = new SimpleXMLElement($xmlStr);
$foo = $xml->xpath('//string[@name="Paul"]')[0];
$foo[0] = 'Baobab';
echo $xml->asXML();

如果您知道这将始终是 XML 的布局,您可以这样做...

$xml->string[0] = 'Baobab';