Nano Hash - криптовалюты, майнинг, программирование

PHP DOM для анализа всех текстовых узлов

Есть ли способ получить массив всех текстовых узлов из строки HTML? Я хотел бы, чтобы он извлекал «вложенные» элементы независимо, поэтому такая строка:

<p>This is a <b>nested <i>HTML</i> tag<b>...</p>

будут получены как This is a, nested, HTML, tag и ... как отдельные элементы.

Поиск в Google и поиск SO привели меня к тому, что я собрал воедино этот беспорядок кода:

$doc = new DOMDocument();
$doc->loadHTML($contents);
$doc->loadHTML("<p>not in the brackets..</p>");
$xpath = new DOMXPath($doc);
$textnodes = $xpath->evaluate('//text()');
echo '<pre>'.print_r($textnodes,1).'</pre>';die;

Это дает мне:

DOMNodeList Object
(
)

Я никогда раньше не использовал какие-либо объекты DOM - и мой XPath не очень хорош - поэтому я чувствую себя здесь очень не в своей тарелке! Любая помощь будет оценена по достоинству.

11.11.2011

  • Вы не можете работать с print_r или var_dump над объектами DOM. Они не раскрывают свои внутренности. Ваш XPath правильный. Повторите DOMNodeList с foreach ($textnodes as $textnode) echo $textnode->wholeText;, чтобы напечатать текст. См. codepad.viper-7.com/7lsFRG. 12.11.2011
  • Всегда глупости! Спасибо. 12.11.2011

Ответы:


1

XPath возвращает DOMNodeList, который необходимо правильно оценить. Вот пример на основе тегов:

$xpath = new DOMXpath( $templateDOM );
$xpath->registerNamespace( "fcm", "http://www.w3.org/1999/xhtml" );
$entries = $xpath->query( "//img" );

foreach( $entries as $entry ) {

    $newVar = array(
          'src'   => @$entry->attributes->getNamedItem( 'src' )->nodeValue, 
          'title' => $entry->attributes->getNamedItem( 'title' )->nodeValue, 
    );

    ...    

}
12.11.2011
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

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

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

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

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..