如何使用php从xml中删除子节点

时间:2015-04-26 08:47:39

标签: php xml

$xpath = new DOMXPATH($xml);

foreach($xpath->query("/root/info[name = '$c_name']") as $node)
{
    $node->parentNode->removeChild($node);
}

在localhost上执行此代码时出现此错误。

  

警告:DOMXPath :: query():表达式无效

我猜在foreach循环中有一个错误。

1 个答案:

答案 0 :(得分:0)

您的代码错过了错误处理,并且您创建xpath表达式的方式很容易被注入,这也很容易破坏它。

$xpath = new DOMXPATH($xml);

$expression = "/root/info[name = '$c_name']";

$result = $xpath->query($expression);

if (false === $result) {
    throw new InvalidArgumentException(
        sprintf(
            'Xpath expression %s failed for input %s'
            , var_export($expression, true)
            , var_export($c_name, true)
        )
    );
}

foreach($result as $node)
{
    $node->parentNode->removeChild($node);
}

此示例尚未处理注入问题,只是引入了正确的错误处理,以便您尽早意识到错误实际发生的位置。

如果您进一步分析它,您可能会发现单引号的问题。之前的Q& A涵盖了该主题: