Включение / исключение содержимого с помощью xPath / DOM> PHP - PullRequest
1 голос
/ 08 февраля 2012

Я пытаюсь взять существующий php-файл, который я создал для страницы моего сайта (blue.php), и получить нужные мне части с помощью некоторого xPath, чтобы создать другую версию этой страницы (синий). -2.php).

Я успешно извлек свой существующий файл .php с

$documentSource = file_get_contents("http://mysite.com/blue.php");

Я могу изменить атрибут, и мои изменения будут корректно отражены в blue-2.php, например:

$xpath->query("//div[@class='walk']");
foreach ($xpath->query("//div[@class='walk']") as $node) {
$source = $node->getAttribute('class');
$node->setAttribute('class', 'run');

С моим текущим кодом я могу вносить изменения, как в примере выше. Что я действительно хочу сделать, так это удалить / исключить некоторые элементы div и другие элементы из списка, отображаемого на моей новой странице php (blue-2.php).

Используя echo $doc->saveHTML(); в конце моего кода, кажется, что все из blue.php включено в вывод blue-2.php, когда я хочу выводить только некоторые элементы, исключая другие.

Итак, суть моего вопроса:

Могу ли я проанализировать всю страницу, используя $documentSource = file_get_contents("http://mysite.com/blue.php");, и выбрать и выбрать (включить и исключить) какие элементы отображаются на моей новой странице с помощью xPath? Или я ограничен только внесением изменений в существующий код, как в приведенном выше примере с Div Class Walk / Run?

Спасибо за любые рекомендации.

1 Ответ

3 голосов
/ 08 февраля 2012

Я пробовал это, и он просто выдает ошибки:

$xpath->query("//img[@src='blue.png']")->remove();

Какая часть документации заставила вас думать, remove - это метод DOMNodeList? Используйте DOMNode::removeChild

foreach($xpath->query("//img[@src='blue.png']") as $node){
    $node->parentNode->removeChild($node);
}

Я бы предложил немного просмотреть все классы и функции из расширения DOM (которое не только для PHP), чтобы получить представление о том, что и где искать.

С другой стороны: это, вероятно, намного более эффективный ресурс, если вы могли бы получить переключатель в своем исходном blue.php, что привело бы к другому выводу, потому что это решение (дополнительный http-запрос, полная загрузка и манипулирование DOM) имеет LOT ненужных накладных расходов по сравнению с этим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...