Хобрук: Ваш путь к мастерству в программировании

Используя DOMXpath, как пройти через DOM и остановиться на первом фрагменте текста?

Я должен был использовать DOMXpath для перебора узлов DOM и останавливаться, когда доходит до первого фрагмента текста.

Таким образом, с помощью этого метода я могу захватить и удалить первые разрывы строк, но оставить остальные после приветствия, мир:

$html = '<br><br><br>Hello World<br><br><br>'

Я не уверен, что такое запрос $xpath для поиска простого текста, но я представляю, что код будет примерно таким:

$doc = new DOMDocument();
$doc->loadHTML($html);
showDOMNode($doc);
$i = 1;
$dom_xpath = new DOMXpath($doc);
foreach($nodes as $node) {
  do {
    $node->parentNode->removeChild($node); 
   } while ($i > 0);
  if($node == $xpath->query("/:TEXT")){
      $i = 0;
  }
}  

Просто грубый фрагмент кода, но представьте, что я хочу что-то вроде этого, может кто-нибудь заполнить пробелы для меня, пожалуйста.

01.01.2014

  • В вашем примере //br[not(preceding::text())] выберет все <br> элементы, перед которыми нет текстового узла где-то в документе. Затем вы можете удалить эти элементы. Но я полагаю, что ваши реальные требования немного более значительны... и чем больше вы заботитесь о них, тем сложнее будет чистый селектор XPath. 02.01.2014
  • @cHao Хм, интересно, позвольте мне поиграть с этим минуту, это, безусловно, лучший (единственный) ответ, который у меня был до сих пор :) спасибо. 02.01.2014
  • @cHao Вопрос, в моем примере, hello world все еще находится внутри узла, даже если он не заключен в какие-либо теги ‹p›, если да, то в каком узле он находится? 02.01.2014
  • Все в документе является узлом, даже чистый текст. Hello World — это текстовый узел, и он будет иметь того же родителя, что и окружающие его элементы <br>, которым в вашем примере должен быть элемент <body>. 02.01.2014
  • @cHao Ты славный ублюдок, я думаю, это работает. 02.01.2014

Ответы:


1
$doc->loadHTML($html);
    $xpath = new DOMXPath($doc);
    foreach($xpath->query('//br[not(preceding::text())]') as $node) {
        $node->parentNode->removeChild($node);
    }
    return $doc->saveHTML();

@cHao мужик!

02.01.2014
Новые материалы

Создание кнопочного меню с использованием HTML, CSS и JavaScript
Вы будете создавать кнопочное меню, которое имеет состояние наведения, а также позволяет вам выбирать кнопку при нажатии на нее. Финальный проект можно увидеть в этом Codepen . Шаг 1..

Внедрите OAuth в свои веб-приложения для повышения безопасности
OAuth — это широко распространенный стандарт авторизации, который позволяет приложениям получать доступ к ресурсам от имени пользователя, не раскрывая его пароль. Это позволяет пользователям..

Классы в JavaScript
class является образцом java Script Object. Конструкция «class» позволяет определять классы на основе прототипов с чистым, красивым синтаксисом. // define class Human class Human {..

Как свинг-трейдеры могут использовать ИИ для больших выигрышей
По мере того как все больше и больше профессиональных трейдеров и активных розничных трейдеров узнают о возможностях, которые предоставляет искусственный интеллект и машинное обучение для улучшения..

Как построить любой стол
Я разработчик программного обеспечения. Я люблю делать вещи и всегда любил. Для меня программирование всегда было способом создавать вещи, используя только компьютер и мое воображение...

Обзор: Машинное обучение: классификация
Только что закончил третий курс курса 4 часть специализации по машинному обучению . Как и второй курс, он был посвящен низкоуровневой работе алгоритмов машинного обучения. Что касается..

Разработка расширений Qlik Sense с qExt
Использование современных инструментов веб-разработки для разработки крутых расширений Вы когда-нибудь хотели кнопку для установки переменной в приложении Qlik Sense? Когда-нибудь просили..