PHP 循环中的 SimpleXMLElement addChild 仅显示一次最大值
PHP SimpleXMLElement addChild in a loop only show once with largest value
我有一个 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>
现在,我想在 <name>
的正上方添加升序 <id>
,如下所示:
<include>
<data>
<id>1203001</id>
<name>Chicken</name>
<price>1</price>
</data>
<data>
<id>1203002</id>
<name>Fish</name>
<price>5</price>
</data>
...Cut off about 100 lines...
<data>
<id>1203105</id>
<name>Pig</name>
<price>105</price>
</data>
<include>
我使用了 for
循环,这是我的代码:
$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>
XML;
for($i = 1203001; $i <= 1203105; $i++) {
$xml = new SimpleXMLElement($data);
$xml->data->addChild("id", $i);
}
echo $xml->asXML();
但是我得到的结果是<id>
只出现了一次,最大值在</data>
旁边,而不是我想要的位置::
<include>
<data>
<name>Chicken</name>
<price>1</price>
<id>1203105</id></data>
<data>
<name>Fish</name>
<price>5</price>
</data>
...
请告诉我解决这个问题的方法。非常感谢您的解决方案。
您每次通过循环都从 $data
重新创建 $xml
,因此您将放弃在上一次迭代中所做的更改。
在循环之前初始化$xml
。然后遍历data
个子节点。
$xml = new SimpleXMLElement($data);
$i = 1203001;
foreach ($xml->data as $node) {
$node->addChild("id", $i++);
}
如果要在 <data>
节点的开头而不是末尾插入 <id>
,请参阅 SimpleXML how to prepend a child in a node?
我有一个 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>
现在,我想在 <name>
的正上方添加升序 <id>
,如下所示:
<include>
<data>
<id>1203001</id>
<name>Chicken</name>
<price>1</price>
</data>
<data>
<id>1203002</id>
<name>Fish</name>
<price>5</price>
</data>
...Cut off about 100 lines...
<data>
<id>1203105</id>
<name>Pig</name>
<price>105</price>
</data>
<include>
我使用了 for
循环,这是我的代码:
$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>
XML;
for($i = 1203001; $i <= 1203105; $i++) {
$xml = new SimpleXMLElement($data);
$xml->data->addChild("id", $i);
}
echo $xml->asXML();
但是我得到的结果是<id>
只出现了一次,最大值在</data>
旁边,而不是我想要的位置::
<include>
<data>
<name>Chicken</name>
<price>1</price>
<id>1203105</id></data>
<data>
<name>Fish</name>
<price>5</price>
</data>
...
请告诉我解决这个问题的方法。非常感谢您的解决方案。
您每次通过循环都从 $data
重新创建 $xml
,因此您将放弃在上一次迭代中所做的更改。
在循环之前初始化$xml
。然后遍历data
个子节点。
$xml = new SimpleXMLElement($data);
$i = 1203001;
foreach ($xml->data as $node) {
$node->addChild("id", $i++);
}
如果要在 <data>
节点的开头而不是末尾插入 <id>
,请参阅 SimpleXML how to prepend a child in a node?