Удалить узлы из XML с определенным значением

Я хочу удалить узел из 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();
?>

Я ищу «cHash» и «index.php» внутри строкового значения «loc», а затем я хочу удалить URL родительского элемента (и все дочерние элементы), если это так. Условие работает, но я не могу выбрать весь узел URL для удаления. Этот фрагмент php удаляет только узел «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);

Это метод проб и ошибок, пожалуйста, помогите!

1

Решение

$url = dom_import_simplexml($node);
$url->parentNode->removeChild($url);

Это должно дать вам то, что вам нужно, это не работает из-за вашего состояния:

(strpos($node->loc, 'cHash') || strpos($node->loc, 'index.php')) !== FALSE

Разве это не должно быть?

(strpos($node->loc, 'cHash') || strpos($node->loc, 'index.php'))

0

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

Других решений пока нет …

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