【发布时间】:2015-04-25 23:49:26
【问题描述】:
我想根据子节点值从 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 sn-p 只删除“loc”节点。首先,我尝试了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);
这是反复试验,请帮助!
【问题讨论】:
标签: php xml dom simplexml nodes