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

如何使用php从xml中删除子节点,php,xml,Php,Xml,我在本地主机上执行此代码时遇到此错误 警告:DOMXPath::query():表达式无效 我猜foreach循环中有一个错误。您的代码没有进行错误处理,并且您创建xpath表达式的方式很容易被注入,这也很容易破坏它 $xpath = new DOMXPATH($xml); foreach($xpath->query("/root/info[name = '$c_name']") as $node) { $node->parentNode->removeChild($

我在本地主机上执行此代码时遇到此错误

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


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

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

$xpath = new DOMXPATH($xml);

foreach($xpath->query("/root/info[name = '$c_name']") as $node)
{
    $node->parentNode->removeChild($node);
}
本例还没有处理注入问题,只是引入了正确的错误处理,以便尽早了解错误实际发生的位置

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


我已经提供了有关我的问题的更多详细信息,请点击此链接:在此处编辑您的问题,不要重新发布。除此之外,编辑是一个改进,所以考虑把它移到这里。还要添加如何检查编辑XML是否有效。
$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);
}