【问题标题】:Retrieve a text node with Simple HTML DOM Parser使用 Simple HTML DOM Parser 检索文本节点
【发布时间】:2014-04-01 17:20:20
【问题描述】:

我对Simple HTML DOM Parser还是很陌生。我想从以下 HTML 中获取一个子元素:

<div class="article">
 <div style="text-align:justify">
    <img src="image.jpg" title="image">
    <br>
    <br>
    "Text to grab"
    <div>......</div>
    <br></br>
    ................
    ................
  </div>
</div>

我正在尝试获取文本“要抓取的文本”

到目前为止,我已经尝试了以下查询:

$html->find('div[class=article] div')->children(3);

但它不起作用。知道如何解决这个问题吗?

【问题讨论】:

  • 这将有助于为您的代码提供一些上下文,而不仅仅是一行...
  • 你遇到了什么错误?
  • 您想从哪个孩子获取文本?
  • 不幸的是,Simple HTML DOM Parser 不将文本视为节点,因此这不起作用...您可以尝试使用find('text'),但请注意,由于&lt;br&gt;,您将有空行。 ..

标签: php xpath simple-html-dom


【解决方案1】:

这里不需要simple_html_dom。可以使用DOMDocumentDOMXPath 完成。两者都是 PHP 核心的一部分。

例子:

// your sample data
$html = <<<EOF
<div class="article">
 <div style="text-align:justify">
    <img src="image.jpg" title="image">
    <br>
    <br>
    "Text to grab"
    <div>......</div>
    <br></br>
    ................
    ................
  </div>
</div>
EOF;

// create a document from the above snippet
// if you are loading from a remote url use:
//   $doc->load($url);
$doc = new DOMDocument();
$doc->loadHTML($html);

// initialize a XPath selector
$selector = new DOMXPath($doc);

// get the text node (also text elements in xml/html are nodes
$query = '//div[@class="article"]/div/br[2]/following-sibling::text()[1]';
$textToGrab = $selector->query($query)->item(0);

// remove newlines on start and end using trim() and output the text
echo trim($textToGrab->nodeValue);

输出:

"Text to grab"

【讨论】:

  • You don't need simple_html_dom here 我很好奇为什么以及应该在哪里使用它? =)
  • @Enissay simple_html_dom 是在 PHP4 时代开发的。 PHP4 没有内置的 XPath 支持。
  • 我明白了,这回答了我很久以来一直在问自己的一个问题……所以“新”内置的 php dom 可以完全取代它吗?如果是这样,我很好奇为什么它仍然被广泛使用:/
  • 我没有使用它 :) 而且我也不鼓励任何人在新项目中使用它。虽然它在以前是一个很棒的库,但新的内置 XPath 类要快得多。我想这是一个非常棒的项目,仍然有很多文档,所以新手可能会认为它仍然是首选解决方案。
  • 哈哈,我是这些菜鸟之一 xD ...非常感谢这些答案
【解决方案2】:

如果它总是在同一个地方,你可以这样做:

$html->find('.article text', 4);

【讨论】:

    猜你喜欢
    • 2012-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-09
    相关资源
    最近更新 更多