gpt4 book ai didi

php - 如何使用 PHP DOMDocument 删除属性?

转载 作者:行者123 更新时间:2023-12-02 07:41:28 25 4
gpt4 key购买 nike

有了这段 XML:

<my_xml>
<entities>
<image url="lalala.com/img.jpg" id="img1" />
<image url="trololo.com/img.jpg" id="img2" />
</entities>
</my_xml>

我必须去掉图像标签中的所有属性。所以,我这样做了:

<?php

$article = <<<XML
<my_xml>
<entities>
<image url="lalala.com/img.jpg" id="img1" />
<image url="trololo.com/img.jpg" id="img2" />
</entities>
</my_xml>
XML;

$doc = new DOMDocument();
$doc->loadXML($article);
$dom_article = $doc->documentElement;
$entities = $dom_article->getElementsByTagName("entities");

foreach($entities->item(0)->childNodes as $child){ // get the image tags
foreach($child->attributes as $att){ // get the attributes
$child->removeAttributeNode($att); //remove the attribute
}
}

?>

不知何故,当我尝试从 foreach block 中删除一个 from 属性时,看起来内部指针丢失了并且它没有同时删除这两个属性。

还有其他方法吗?

提前致谢。

最佳答案

将内部 foreach 循环更改为:

while ($child->hasAttributes())
$child->removeAttributeNode($child->attributes->item(0));

或者回到前面删除:

if ($child->hasAttributes()) { 
for ($i = $child->attributes->length - 1; $i >= 0; --$i)
$child->removeAttributeNode($child->attributes->item($i));
}

或者复制属性列表:

if ($child->hasAttributes()) {
foreach (iterator_to_array($child->attributes) as $attr)
$child->removeAttributeNode($attr);
}

这些都行。

关于php - 如何使用 PHP DOMDocument 删除属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10619282/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com