2010-12-22 107 views
2

如何刪除xml塊(汽車)哪裏的顏色是藍色的?從xml文件中刪除xml dom

<?xml version="1.0"?> 
<cars> 
    <car> 
     <color>blue</color> 
     <name>jonas</name> 
    </car> 
    <car> 
     <color>green</color> 
     <name>123</name> 
    </car> 
    <car> 
     <color>red</color> 
     <name>1234</name> 
    </car> 
</cars> 

回答

3

假設你的XML包含在一個變量$xml,你可以使用類似下面的代碼:

$dom = new DOMDocument; // use PHP's DOMDocument class for parsing XML 

$dom->loadXML($xml); // load the XML 

$cars = $dom->getElementsByTagName('cars')->item(0); // store the <cars/> element 

$colors = $dom->getElementsByTagName('color'); // get all the <color/> elements 

foreach ($colors as $item) // loop through the color elements 
    if ($item->nodeValue == 'blue') { // if the element's text value is "blue" 
     $cars->removeChild($item->parentNode); // remove the <color/> element's parent element, i.e. the <car/> element, from the <cars/> element 
    } 
} 

echo $dom->saveXML(); // echo the processed XML 
1

如果你有很長的XML文件,通過所有<car>項目循環可能需要而。作爲替代@ lonesomeday的帖子,這個目標所需要的元素使用XPath:

$domd = new DOMDocument(); 
libxml_use_internal_errors(true); 
$domd->loadXML($xml); 
libxml_use_internal_errors(false); 

$domx = new DOMXPath($domd); 
$items = $domx->query("//car[child::color='blue']"); 

$cars = $domd->getElementsByTagName("cars")->item(0); 
foreach($items as $item) { 
    $cars->removeChild($item); 
} 
+0

+1好聽點 - 你需要的基準制定出什麼是最好根據`car`元素的量。 – lonesomeday 2010-12-22 17:33:42