PHP DOM解析所有文本节点

时间:2011-11-11 22:38:05

标签: php parsing dom text xpath

有没有办法可以从HTML字符串中检索所有纯文本节点的数组?我希望它能独立检索'嵌套'元素,所以像这样的字符串:

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

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

谷歌搜索和搜索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也不是很好 - 所以我觉得这里的水非常缺水!任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

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

    ...    

}