【问题标题】:How to get <img> src from CDATA in RSS?如何从 RSS 中的 CDATA 获取 <img> src?
【发布时间】:2012-01-12 16:41:32
【问题描述】:

我正在使用 Magpie 从 RSS 提要中获取数据。
$rss[description] 包含带有 html 元素的 CDATA:

<![CDATA[  
<div>  
 <a href='url'>  
  <img src='img_url' alt='aaa' title='bbb' border='0' width='116' height='116'>  
 </a>  
</div>]]>  
Some other text  

如何从中获取“img_url”? preg_match() 是唯一的方法吗?也许我可以使用 simpleXML?

【问题讨论】:

    标签: php rss magpie


    【解决方案1】:

    CDATA 你有一个包含 HTML 的字符串。因此,首先将其视为文本,但由于此文本旨在包含 HTML,请使用适合解析 HTML 的解决方案解析此文本。

    换句话说:为工作(解析 HTML)使用适当的工具(HTML 解析器)

    已经有在 PHP 中解析 HTML 的现有解决方案 - 例如。查看这些问题的答案:

    1. How to parse and process HTML with PHP?
    2. Robust, Mature HTML Parser for PHP

    所以,基本上,您已经能够从您的 XML 中获取 HTML 字符串。现在使用上面提到的一些解决方案解析 HTML 并获取图像的来源。

    使用 preg_match() 解析 HTML 不是一个好主意,因为它需要非常复杂才能完成 HTML 解析器适合的简单事情。

    【讨论】:

      【解决方案2】:

      您最好不要在可以使用适当工具的情况下使用正则表达式。我想到了一些事情(尽管也许可以更容易地完成):

      $descr = $rss[description]; // String. You have extracted description part from your feed
      
      $dom = new DOMDocument();
      $dom->loadHTML($descr); // or you can use loadXML
      if (!$dom) {
          die('Error loading HTML string.');
      }
      
      $xml = simplexml_import_dom($dom);
      $imgSrc = (string)$xml->body->div->a->img['src'];
      

      我们开始吧。根据您的示例 CDATA $imgSrc 将等于 img_url

      【讨论】:

        【解决方案3】:

        是的,你应该使用正则表达式,CDATA意味着数据应该被视为普通字符串而不需要解析,所以你应该认为它是一个字符串..

        【讨论】:

        • -1 不,你不应该使用正则表达式,有很多比正则表达式解析HTML更有效的解决方案。
        • @lvil:你可以看到这个问题的答案:Robust, Mature HTML Parser for PHP。只需将其视为普通字符串,但字符串包含 HTML。所以你需要的不是正则表达式,它需要非常复杂才能匹配所有情况。你需要 HTML 解析器,就像我链接的问题一样。
        • @Tadeck,您的评论很有帮助。我先用 preg_match 完成了它,但我认为你的方式更好。请把它写成答案,以便我接受。
        • @lvil:完成。我希望它有所帮助。祝你好运。
        猜你喜欢
        • 2012-04-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-03-11
        • 2015-10-13
        • 2013-04-17
        • 2016-05-01
        • 1970-01-01
        相关资源
        最近更新 更多