如何使用simpleXML和php在具有特定id的节点中写入数据
我在这里找到了很多关于如何使用XPath获取具有指定id的节点以及如何使用SimpleXMLElement::asXML写入数据的教程 但是,是否可以使用XPath在节点中使用特定的如何使用simpleXML和php在具有特定id的节点中写入数据,php,xpath,simplexml,Php,Xpath,Simplexml,我在这里找到了很多关于如何使用XPath获取具有指定id的节点以及如何使用SimpleXMLElement::asXML写入数据的教程 但是,是否可以使用XPath在节点中使用特定的id写入数据,而不使用foreach方法 这是我的 <people> <person> ... </person> <person id="17"> <name>John</name>
id
写入数据,而不使用foreach
方法
这是我的
<people>
<person>
...
</person>
<person id="17">
<name>John</name>
</person>
<person>
...
</person>
</people>
或
然后
$xml->asXML(data.xml);
正如@Passerby指出的,返回一个数组,因此最简单的方法是使用foreach
()在其上循环:
对象都链接回原始的SimpleXML解析结构,因此将整个内容保存回XML将反映任何更改
因为我们知道在本例中XPath的结果中只有一个元素,所以修改$nodes[0]
也可以工作-尽管要注意如果找不到节点会发生什么():
最简洁的版本只能在PHP5.4中使用,在PHP5.4中,您可以直接在函数返回值上使用数组下标,将上面的内容压缩到一行中-同样,只有在您确定会找到元素()的情况下才可以使用它:
foreach
有什么问题吗?每次需要编辑xml数据的某些部分时,可以遍历18000行吗?或者一些内置php函数也会这样做?我不确定你说的是哪个foreach
,但返回一个数组,我说的是foreach
ing,或者你有18000个相同ID的节点?哦。好的,若我得到一个用XPath返回的数组,我将在那个里更改值,它将如何反映在我的xml对象上,以便我可以将所有数据保存在文件中?你们可以简单地。
$xml->xpath('/person[@id=17]')->name = Bill;
$xml->asXML(data.xml);
$nodes=$xml->xpath('//person[@id=17]');
foreach($nodes as $node)
{
$node->name="Bill";
}
$nodes=$xml->xpath('//person[@id=17]');
$nodes[0]->name="Bill";
$xml->xpath('//person[@id=17]')[0]->name="Bill";