XML — как удалить / удалить тег с определенной строкой в ​​QueryPath?

Как отфильтровать узел с определенной строкой внутри и 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

Решение

Чтобы достичь этого, 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);

Это было быстро и эффективно.

Надеюсь, это поможет кому-то.

0

Другие решения

У меня работает filterPreg.

$elements = htmlqp($page, 'user urls linky');
$filtered = $elements->filterPreg("/www.weblinky-[^4].com/");
echo count($filtered ); // 4

Хотя … я думаю, что для восстановления HTML понадобится цикл через элементы с фильтром $, что не идеально для ИМО …

0

По вопросам рекламы [email protected]