如何使用php从xml中删除子节点
我在本地主机上执行此代码时遇到此错误 警告:DOMXPath::query():表达式无效如何使用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($
我猜foreach循环中有一个错误。您的代码没有进行错误处理,并且您创建xpath表达式的方式很容易被注入,这也很容易破坏它
$xpath = new DOMXPATH($xml);
foreach($xpath->query("/root/info[name = '$c_name']") as $node)
{
$node->parentNode->removeChild($node);
}
本例还没有处理注入问题,只是引入了正确的错误处理,以便尽早了解错误实际发生的位置
如果你进一步分析,你可能会发现单引号的问题。之前的问答涵盖了该主题:
$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);
}