Php - 如何在 QueryPath 中删除/删除带有特定字符串的标签?
Posted
技术标签:
【中文标题】Php - 如何在 QueryPath 中删除/删除带有特定字符串的标签?【英文标题】:Php - how to remove/delete tag with specific string in QueryPath? 【发布时间】:2016-08-25 02:44:12 【问题描述】:如何过滤其中包含特定字符串的节点以及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>
假设我想使用QueryPath
删除/删除<link> www.weblink-4.com</link>
,您是如何实现的?
我尝试了类似的方法:
$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"?>*
这应该很简单,但变得相当有压力......有什么建议吗?
【问题讨论】:
【参考方案1】:为了实现这一点,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);
这是快速有效的。
希望对某人有所帮助。
【讨论】:
【参考方案2】:filterPreg 对我来说没问题。
$elements = htmlqp($page, 'user urls linky');
$filtered = $elements->filterPreg("/www.weblinky-[^4].com/");
echo count($filtered ); // 4
虽然.. 我认为它需要循环通过 $filtered 元素来重建 HTML,这不是理想的 IMO..
【讨论】:
谢谢,虽然我收到警告:Warning: preg_match(): Delimiter must not be alphanumeric or backslash in...
我使用的是旧 (2.1) 版本的 QP,所以这可能是造成差异的原因... filterPreg 的不同分隔符,例如 "#www.weblinky-[^4].com# "也可以试试。
我现在面临一个不同的问题...您可以帮忙...请参阅链接::: ***.com/questions/36957442/…以上是关于Php - 如何在 QueryPath 中删除/删除带有特定字符串的标签?的主要内容,如果未能解决你的问题,请参考以下文章