删除具有相同名称的 XML child
Remove XML child with same name
我有一个很大的 XML,其中包含以下内容:
<?xml version="1.0" encoding="UTF-8"?>
<valasz xmlns="" verzio="1.0">
<arak>
<ar>
<cikkid>439902</cikkid>
<cikkszam>DVDV-16Z10</cikkszam>
<listaar>1225,0000000</listaar>
<ar>1157,6200000</ar>
<akcios_ar>1157,6200000</akcios_ar>
<devizanem>HUF</devizanem>
</ar>
<ar>
..
<ar>1157,6200000</ar>
...
</ar>
</arak>
我想要的是删除 arak->ar->ar child 因为它在导入中导致它看起来像重复项,并减慢了过程。
我尝试了以下方法:
$node = readfile($arlista[0]);
$nodes = simplexml_load_string($node);
$arnode = $nodes->xpath("/valasz/arak/ar/ar");
foreach ($arnode as &$ar){
$nodes->removeChild($ar);
}
echo $nodes;
这只是 returns 我原来的 xml,没有删除 arak->ar->ar child 节点。
我做错了什么?
SimpleXML 中没有::removeChild() 这样的东西。
你想在 foreach 循环中做的是:
foreach ($arnode as $ar){
unset($ar->{0});
}
请注意:发布的 XML 无效,但我确信这只是某种复制和粘贴缺陷
完整代码:
$xml = '<?xml version="1.0" encoding="UTF-8"?>
<valasz xmlns="" verzio="1.0">
<arak>
<ar>
<cikkid>439902</cikkid>
<cikkszam>DVDV-16Z10</cikkszam>
<listaar>1225,0000000</listaar>
<ar>1157,6200000</ar>
<akcios_ar>1157,6200000</akcios_ar>
<devizanem>HUF</devizanem>
</ar>
<ar>
<ar>1157,6200000</ar>
</ar>
</arak>
</valasz>';
$nodes = simplexml_load_string($xml);
$arnode = $nodes->xpath("/valasz/arak/ar/ar");
foreach ($arnode as $ar){
unset($ar->{0});
}
print_r($nodes);
Returns这个
简单XML元素对象
(
[@attributes] => 数组
(
[版本] => 1.0
)
[arak] => SimpleXMLElement Object
(
[ar] => Array
(
[0] => SimpleXMLElement Object
(
[cikkid] => 439902
[cikkszam] => DVDV-16Z10
[listaar] => 1225,0000000
[akcios_ar] => 1157,6200000
[devizanem] => HUF
)
[1] => SimpleXMLElement Object
(
)
)
)
)
我有一个很大的 XML,其中包含以下内容:
<?xml version="1.0" encoding="UTF-8"?>
<valasz xmlns="" verzio="1.0">
<arak>
<ar>
<cikkid>439902</cikkid>
<cikkszam>DVDV-16Z10</cikkszam>
<listaar>1225,0000000</listaar>
<ar>1157,6200000</ar>
<akcios_ar>1157,6200000</akcios_ar>
<devizanem>HUF</devizanem>
</ar>
<ar>
..
<ar>1157,6200000</ar>
...
</ar>
</arak>
我想要的是删除 arak->ar->ar child 因为它在导入中导致它看起来像重复项,并减慢了过程。
我尝试了以下方法:
$node = readfile($arlista[0]);
$nodes = simplexml_load_string($node);
$arnode = $nodes->xpath("/valasz/arak/ar/ar");
foreach ($arnode as &$ar){
$nodes->removeChild($ar);
}
echo $nodes;
这只是 returns 我原来的 xml,没有删除 arak->ar->ar child 节点。
我做错了什么?
SimpleXML 中没有::removeChild() 这样的东西。 你想在 foreach 循环中做的是:
foreach ($arnode as $ar){
unset($ar->{0});
}
请注意:发布的 XML 无效,但我确信这只是某种复制和粘贴缺陷
完整代码:
$xml = '<?xml version="1.0" encoding="UTF-8"?>
<valasz xmlns="" verzio="1.0">
<arak>
<ar>
<cikkid>439902</cikkid>
<cikkszam>DVDV-16Z10</cikkszam>
<listaar>1225,0000000</listaar>
<ar>1157,6200000</ar>
<akcios_ar>1157,6200000</akcios_ar>
<devizanem>HUF</devizanem>
</ar>
<ar>
<ar>1157,6200000</ar>
</ar>
</arak>
</valasz>';
$nodes = simplexml_load_string($xml);
$arnode = $nodes->xpath("/valasz/arak/ar/ar");
foreach ($arnode as $ar){
unset($ar->{0});
}
print_r($nodes);
Returns这个 简单XML元素对象 ( [@attributes] => 数组 ( [版本] => 1.0 )
[arak] => SimpleXMLElement Object
(
[ar] => Array
(
[0] => SimpleXMLElement Object
(
[cikkid] => 439902
[cikkszam] => DVDV-16Z10
[listaar] => 1225,0000000
[akcios_ar] => 1157,6200000
[devizanem] => HUF
)
[1] => SimpleXMLElement Object
(
)
)
)
)