【问题标题】:Extract text from html tags in an rss feed从 rss 提要中的 html 标签中提取文本
【发布时间】:2014-01-30 08:45:08
【问题描述】:

我们有以下 RSS 源

<title>THIS IS THE TITLE</title>
<link>http://www.website.com/....</link>
<description>
  <div class="primary-image">
   <img typeof="foaf:Image" src="http://website.com/" alt="Drink driving" title="Drink driving" />
  </div>
  <div class="field-group-format group_meta field-group-div group-meta  speed-fast effect-none">
   <span class="field field-name-field-published-date field-type-datetime field-label-hidden">
      <span class="field-item even">
    <span class="date-display-single" property="dc:date" datatype="xsd:dateTime" content="2014-01-29T17:43:00+00:00">29 Jan, 2014 5:43pm</span>
      </span>
   </span>
   <span class="field field-name-field-author field-type-node-reference field-label-hidden">
      <span class="field-item even"><a href="/authors/joe-finnerty">Joe Finnerty</a></span>
   </span>
  </div>
  <p class="short-desc">TEXT THAT I WANT TO EXTRACT FROM HERE</p>
</description>

我正在尝试使用以下this script 提取&lt;p class="short-desc"&gt;TEXT THAT I WANT TO EXTRACT FROM HERE&lt;/p&gt;,并在此处检查了一些问题,但没有找到实际的答复。

我尝试添加

$htmlStr = $node->getElementsByTagName('description')->item(0)->nodeValue;
$html = new DOMDocument();        
$html->loadHTML($htmlStr);
$xpath = new DOMXPath($html);
$desc = $xpath->query("//*[contains(concat(' ', normalize-space(@class), ' '), ' short-desc')]"); 

$item = array ( 之前,在 foreach 循环内但不起作用。

但没有完成这项工作。也代替 &amp;lt; 正在替换 &lt; AND &amp;quot; 正在替换 " AND &amp;gt; 正在替换 &gt;

请帮助我几天来一直在寻找答案,但没有找到。

【问题讨论】:

  • 您只需要文本?或与&lt;p&gt; 标签一起使用?
  • 仅来自该规范 p 类标签的 TEXT THAT I WANT TO EXTRACT FROM HERE

标签: php xml rss


【解决方案1】:

假设您将上述 HTML 内容传递给 $html 变量..

 $dom = new DOMDocument;
    @$dom->loadHTML($html);
    foreach ($dom->getElementsByTagName('p') as $tag) {
        if ($tag->getAttribute('class') === 'short-desc') {
            echo $tag->nodeValue; //"prints" TEXT THAT I WANT TO EXTRACT FROM HERE
         }
    }

【讨论】:

【解决方案2】:

如果我理解正确,您想从提要中删除标签,以便您可以尝试这样:

<?php
$text = '<p>Test paragraph.</p><!-- Comment --> <a href="#fragment">Other text</a>';
echo strip_tags($text);
?>

输出将是:

Test paragraph. Other text

欲了解更多信息:http://in3.php.net/strip_tags

【讨论】:

    【解决方案3】:

    为什么不使用正则表达式?

    $strRegex = '%<p class="short-desc">(.+?)</p>%s';
    
    if (preg_match_all($strRegex, $strContent, $arrMatches))
    {
    var_dump($arrMatches[1][0]);
    }
    

    并获取内容使用

    $path = 'path/to/file';
    $strContent = file_get_contents($path);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-05
      • 2021-10-22
      • 2017-04-24
      • 1970-01-01
      相关资源
      最近更新 更多