2014-09-24 68 views
0

我试图更新XML文档。我从一个包含XML的字符串开始。PHP - 更新XML属性

我加载该字符串SimpleXMLElement对象:

$xmlDoc = simplexml_load_string($my_xml_string);

我发现我想更新,像这样一个节点:以

$node= $xmlDoc->xpath("//nodename[@node_attribute='{$search_attribute_value}']");

现在我想更新node_attribute属性。我试图做$node['node_attribute']=$new_attribute_value然而$node是它自己的对象,并且这不会更新$xmlDoc对象。

如何找到并更新$xmlDoc中的属性值?

回答

2

您在那里的$node实际上是一个节点数组。如果你知道你只得到了一个更新,您可以:

$node[0]['node_attribute'] = $new_attribute_value; 

更合适的可能是:

$nodes = $xmlDoc->xpath("//nodename[@node_attribute='{$search_attribute_value}']"); 
foreach ($nodes as $node) { 
    $node['node_attribute'] = $new_attribute_value; 
} 

和预期的一样,一切都会更新。

+0

是的,向该节点添加索引的确有窍门。 '$ node [0] ['node_attribute'] = $ new_attribute_value;'不知道之前发生了什么。 – 2014-09-24 04:47:44

+1

@ dev.e.loper还要注意,如果你的节点有一个文本部分,你将使用'$ node [0] - > {'0'}',就像这样写在[在这里](https://eval.in /私营/ 50fd041d061d09)。 – 2014-09-24 04:49:12

0

未经测试,但您应该尝试这样。

$nodename->attributes()->node_attribute = $new_attribute_value;