PHP DOM 解析所有文本节点

标签 php parsing dom text xpath

有没有办法可以从 HTML 字符串中检索所有纯文本节点的数组?我希望它能够独立检索“嵌套”元素,因此字符串如下:

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

将被检索为 This is anestedHTMLtag。 .. 作为单独的元素。

谷歌搜索和搜索使我将这些困惑的代码拼凑在一起:

$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 也不是很好 - 所以我在这里感觉非常无水!任何帮助将不胜感激。

最佳答案

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, 
    );

    ...    

}

关于PHP DOM 解析所有文本节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8100828/

相关文章:

php - 查询数据库后打印出部分唯一的数据

java - 使用Java发送POST数据

java - ANTLR:如何根据我们解析的规则更改生成的 AST?

python - 自然语言时间解析器

javascript - 如何将 HTML/JS 插入由 chrome.windows.create 创建的窗口(类型为 "panel")?

javascript - 使用 JavaScript 删除 HTML 表格中的所有行

php - WooCommerce:更改相关产品标题并删除/更改 <h2>

php - mysqli_num_rows = 0,而它应该是 1

php - 从 URL 解析域

javascript - 单击某个元素后调用 jQuery 函数