Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/243.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.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
循环中的PHP SimpleXMLElement addChild仅显示一次,且值最大_Php_Xml_Simplexml - Fatal编程技术网

循环中的PHP SimpleXMLElement addChild仅显示一次,且值最大

循环中的PHP SimpleXMLElement addChild仅显示一次,且值最大,php,xml,simplexml,Php,Xml,Simplexml,我有一个XML文件: <include> <data> <name>Chicken</name> <price>1</price> </data> <data> <name>Fish</name> <price>5</price> </data>

我有一个XML文件:

<include>
    <data>
        <name>Chicken</name>
        <price>1</price>
    </data>
    <data>
        <name>Fish</name>
        <price>5</price>
    </data>
    ...Cut off about 100 lines...
    <data>
        <name>Pig</name>
        <price>105</price>
    </data>
<include>
但是,我得到的结果是,
只出现一次,最大值出现在
旁边,而不是我想要的位置::

<include>
    <data>
        <name>Chicken</name>
        <price>1</price>
    <id>1203105</id></data>
    <data>
        <name>Fish</name>
        <price>5</price>
    </data>
    ...

鸡
1.
1203105
鱼
5.
...

请告诉我解决这个问题的方法。非常感谢您的解决方案。

您每次通过循环都从
$data
重新创建
$xml
,因此您放弃了在上一次迭代中所做的更改

在循环之前初始化
$xml
。然后在
数据
子节点上循环

$xml = new SimpleXMLElement($data);
$i = 1203001;
foreach ($xml->data as $node) {
    $node->addChild("id", $i++);
}

如果要在
节点的开头而不是结尾插入
,请参见您在循环中每次都从
$data
重新创建
$xml
,因此放弃在上一次迭代中所做的更改

在循环之前初始化
$xml
。然后在
数据
子节点上循环

$xml = new SimpleXMLElement($data);
$i = 1203001;
foreach ($xml->data as $node) {
    $node->addChild("id", $i++);
}

如果您想在
节点的开头而不是结尾插入
,请参见

我喜欢SimpleXML的地方是,您还可以使用对象表示法来设置新值
$data->id=$I我喜欢SimpleXML的一点是,您还可以使用对象表示法来设置新值,而不是
addChild()
我已经按照你的指示做了,虽然
本身增加了,但是我有问题
在同一行,
在末尾而不是上面
像这样:
1203XXX
。下面是结果的快照:下面是代码:
simplexmlement
除了节点的末尾之外,没有任何地方可以添加。查看如何进行预编。我使用了该指南和替换。现在我想把整个
移到
,有什么办法吗?我不知道你说的是什么意思,这个问题不是说明了怎么做吗?一般来说,XML节点中标记的顺序应该无关紧要。目前,
位于
之下,我想问一下,有没有办法将整个
向上移动到
之上?因为它位于末尾,所以观察非常困难。我按照您的指示进行了操作,虽然
本身增加了,但我有问题
在同一行,
在末尾而不是上面
像这样:
1203XXX
。下面是结果的快照:下面是代码:
simplexmlement
除了节点的末尾之外,没有任何地方可以添加。查看如何进行预编。我使用了该指南和替换。现在我想把整个
移到
,有什么办法吗?我不知道你说的是什么意思,这个问题不是说明了怎么做吗?一般来说,XML节点中标记的顺序应该无关紧要。目前,
位于
之下,我想问一下,有没有办法将整个
向上移动到
之上?因为它位于末端,所以观测相当困难。
$xml = new SimpleXMLElement($data);
$i = 1203001;
foreach ($xml->data as $node) {
    $node->addChild("id", $i++);
}