Php - 如何在QueryPath中删除/删除具有特定字符串的标记?

时间:2016-04-29 20:19:18

标签: php xml nodes querypath

如何过滤其中包含特定字符串的节点以及DeleteRemove

这样的东西

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"?>* 

这应该很简单,但变得非常紧张.....任何建议?

2 个答案:

答案 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 ..