如何过滤其中包含特定字符串的节点以及Delete
或Remove
。
像
这样的东西 XML
就像:
<?xml version="1.0"?>
<user>
<urls>
<link>www.weblink-1.com</link>
<link> www.weblink-2.com</link>
<link> www.weblink-3.com</link>
<link> www.weblink-4.com</link>
<link> www.weblink-5.com</link>
</urls>
</user>
我想说我想使用<link> www.weblink-4.com</link>
删除/删除QueryPath
您是如何实现这一目标的?
我尝试过类似的事情:
$r= qp($path,'user')->find("urls>link")->
filter("link:contains('<link> www.weblink-4.com</link>')");
print "<h1>".$r."</h1>";
///***ERROR: Catchable fatal error:
Object of class QueryPath\DOMQuery could not be converted to string*
我也尝试了类似的事情:
$r= qp($path,'user')->find("urls>link:contains('<link> www.weblink-4.com</link>')");
print "<h1>".$r."</h1>";
///***ERROR: Catchable fatal error:
Object of class QueryPath\DOMQuery could not be converted to string*
然后像:
$qp = qp($path,'user>urls>link')->filter("link:contains('<link> www.weblink-4.com</link>')")->remove();
$qp->writeXML($path);
///This Deletes the entire Document's nodes leaving only the *<?xml version="1.0"?>*
这应该很简单,但变得非常紧张.....任何建议?
答案 0 :(得分:0)
为实现这一目标,QueryPath变得有点紧张。我得到了一些提示: @Paul Crovella ......我宁愿使用:
$path = "../ntmhp/prdat/".$userId."/xmls/rf/rss.xml";
$dom = new DOMDocument();
$dom->load($path);
$xpath = new DOMXPath($dom);
foreach($xpath->query('//link[contains(., "www.weblink-4.com")]') as $node) {
$node->parentNode->removeChild($node);
}
$dom->save($path);
这是快速有效的。
希望它有所帮助。
答案 1 :(得分:0)
filterPreg对我来说没问题。
$elements = htmlqp($page, 'user urls linky');
$filtered = $elements->filterPreg("/www.weblinky-[^4].com/");
echo count($filtered ); // 4
虽然..我认为它需要通过$ filtered元素循环来重构HTML,这不是理想的IMO ..