【问题标题】:simple_html_dom find all elements that ONLY contain certain textsimple_html_dom 查找仅包含特定文本的所有元素
【发布时间】:2013-08-26 21:31:09
【问题描述】:

我有:

 <span>something or other</span>
 <b>blarg</b>
 <b>blarg and stuff</b>
 <span>blarg</span>
 <em>wakka wakka</em>
 <em>wakka blarg</em>
 <em>blarg</em>

我只想获取仅包含“blarg”且不包含其他文本的元素,所以:

 <b>blarg</b>
 <span>blarg</span>
 <em>blarg</em> 

这里的重要问题是我正在尝试检查 blarg 是否存在于页面上的一个元素中。我对正则表达式有一些普遍的运气,但我宁愿用simple_html_dom 来做,这样我也可以查看子元素和兄弟元素。

有谁知道使用simple_html_dom 执行此操作的最简单方法是什么?

【问题讨论】:

标签: php html dom simple-html-dom


【解决方案1】:

一种方法是解析每个标签,并测试它是否包含'blarg'...

这是一个工作示例:

$text = '<span>something or other</span>
 <b>blarg</b>
 <b>blarg and stuff</b>
 <span>blarg</span>
 <em>wakka wakka</em>
 <em>wakka blarg</em>
 <em>blarg</em>';

echo  "<div>Original Text: <xmp>$text</xmp></div>";

$html = str_get_html($text);

// Find all elements
$tags = $html->find('*');

foreach ($tags as $key => $tag) {
    // If text in tag contains 'blarg'
    if (strcmp(trim($tag->plaintext),'blarg') == 0) {
        echo  "<div> 'blarg' found in \$tags[$key]: <xmp>".$tag->outertext."</xmp></div>";
    }
}

我不知道你想做什么,但这可能是一个开始:)

【讨论】:

  • 这看起来是我迄今为止最好的选择,但我认为 simple_html_dom 中会内置一些更短更简洁的东西。我认为有一种方法可以单独使用 find() 而不必遍历所有元素??
  • AFAIK,没有...我刚刚发现很多类似答案的问题...stackoverflow.com/questions/5465690/…
  • 我正在尝试您的方法,Enissay,但即使我知道它在那里(我有 HTML 正在输出),它也没有找到 'blarg'。你能想到什么理由吗?我已经尝试过大写、小写等,只是为了确定,仍然没有找到。
  • @zoltar,这段代码对我有用......你可以单独尝试一下,你会看到......然后如果你将它集成到你的代码中,我不能说什么不起作用,除非我拥有完整的代码...确保通过添加这些error_reporting(E_ALL);ini_set('display_errors', '1'); 启用错误报告
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-24
  • 2010-11-15
  • 1970-01-01
  • 1970-01-01
  • 2020-09-05
  • 2020-01-13
  • 2021-06-11
相关资源
最近更新 更多