Правильное удаление дочерних элементов в PHP с использованием DOMDocument и DOMXPath - PullRequest
4 голосов
/ 18 ноября 2010

Это был предыдущий другой вопрос, но мы не будем об этом говорить.Я выделяю несколько разделов в стороннем HTML-документе.При сопоставлении некоторых мне нужно удалить определенные теги из результата.Код, который я нашел для этого на SO, был:

$name = $xpath->query("//div[@class='leftColBig']//h3")->item(0);
// remove <span>
foreach($xpath->query("//span", $name) as $node)
    $node->parentNode->removeChild($node);

Это имеет неприятный побочный эффект не только удаления дочернего элемента из $ name, но и всего DOMDocument :( Как я могу изолировать removeChild только дляраздел, который я нашел с помощью запроса.

1 Ответ

4 голосов
/ 18 ноября 2010

Вместо:

$xpath->query("//span", $name)

Do:

$xpath->query("span", $name)

//nodename соответствует всем узлам независимо от того, кто их родитель.$ contextnode игнорируется, когда ваш запрос начинается с //.

...