从具有特定值的XML中删除节点

时间:2015-02-24 11:17:42

标签: php xml dom simplexml nodes

我想根据子节点值从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();
?>

我在“loc”的字符串值中搜索“cHash”和“index.php”然后我想删除父元素url(和所有子元素),如果是这种情况。条件正在运行,但我无法选择要删除的整个url节点。这个php片段只删除“loc”-node。首先我用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);

试错了,请帮忙!

1 个答案:

答案 0 :(得分: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'))

相关问题