Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用simpleXML和php在具有特定id的节点中写入数据_Php_Xpath_Simplexml - Fatal编程技术网

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

如何使用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>

我在这里找到了很多关于如何使用XPath获取具有指定id的节点以及如何使用SimpleXMLElement::asXML写入数据的教程

但是,是否可以使用XPath在节点中使用特定的
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";