2015-02-24 139 views
1

我想根據子節點值從XML中刪除節點。從XML中刪除具有特定值的節點

這是我的XML結構:

<?xml version="1.0" encoding="UTF-8"?> 
<urlset> 
    <url> 
     <loc></loc> 
     <prority></priority> 
     <lastmod></lastmod> 
    </url> 
    <url> 
     <loc></loc> 
     <prority></priority> 
     <lastmod></lastmod> 
    </url> 
    <url> 
     <loc></loc> 
     <prority></priority> 
     <lastmod></lastmod> 
    </url> 
</urlset> 

這是我的PHP:

<?php 
    $xml = simplexml_load_string($args); 
    $nodes = $xml->children(); 

    foreach ($nodes as $node) { 

     if ((strpos($node->loc, 'cHash') || strpos($node->loc, 'index.php')) !== FALSE) { 

      $loc = dom_import_simplexml($node->loc); 
      $loc->parentNode->removeChild($loc); 

     } 

    } 

    $args = $xml->asXML(); 
?> 

我搜索 「cHash」 和 「的index.php」,「祿的字符串值內「然後我想刪除父元素url(和所有的孩子),如果是這樣的話。該條件正在工作,但我不能選擇整個url節點刪除。這個PHP代碼片段只刪除「loc」節點。首先,我嘗試了unset(),因爲有很多帖子都提到過,但沒有奏效。所以我得到了這個,將它導入到DOM元素,然後刪除它。

我想應該是這樣的:

$loc = dom_import_simplexml($node->loc); 
$loc->parentNode->parentNode->removeChild($loc->parentNode); 

或本:

$loc = dom_import_simplexml($node->loc); 
$url = dom_import_simplexml($node); 
$url->parentNode->removeChild($url); 

It's試驗和錯誤,請幫忙!

回答

0
$url = dom_import_simplexml($node); 
$url->parentNode->removeChild($url); 

這應該給你你需要什麼,這是不工作的,因爲你的病情:

(strpos($node->loc, 'cHash') || strpos($node->loc, 'index.php')) !== FALSE 

它不應該是這樣?

(strpos($node->loc, 'cHash') || strpos($node->loc, 'index.php'))