2012-05-16 98 views
2

這片XML的:如何使用PHP DOMDocument去除屬性?

<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塊中移除,它看起來像內部指針丟失,並沒有刪除這兩個屬性。

有沒有另外一種方法呢?

在此先感謝。

回答

7

更改內部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); 
} 

任何這些將工作。

+0

賓果!我正在使用第一種方法。非常感謝你! (另外兩個也工作得很好) – romulodl