如何按属性修改XML节点

时间:2018-01-11 18:06:29

标签: php simplexml

$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循环)?

1 个答案:

答案 0 :(得分:1)

当您使用XPath时,它会返回一个数组。由于这是您要更改的第一项,因此请使用[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';