我想根据子节点值从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);
试错了,请帮忙!
答案 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'))