如何从RSS提要中的描述字段中捕获某些数据


How do you capture certain data from description field in RSS feed?

我有一个正在读取的rss提要。我需要从这个提要中的字段中检索某些数据。

这是示例馈送数据:

<content:encoded><![CDATA[
    <b>When:</b><br />
    Weekly Event - Every Thursday: 1:30 PM to 3:30 PM (CT)<br /><br />
      <b>Where:</b><br />
      100 West Street<BR>2nd floor<BR>Gainesville<BR>
      <br>.....

如何分别提取When:和Where:的数据?我尝试使用regex,但我不确定我是否没有正确访问数据,或者我的regex表达式是否错误。我不打算使用regex。

这是我的代码:

    foreach ($x->channel->item as $event) {
    $eventCounter++;
    $rowColor = ($eventCounter % 2 == 0) ? '#FFFFFF' : '#F1F1F1';
    $content = $event->children('http://purl.org/rss/1.0/modules/content/');
    $contents = $content->encoded;
    echo '<tr style="background-color:' . $rowColor . '">';
    echo '<td>';
    //echo "<a id=buttonRed href='$event->link' title='$event->title' target='_blank'>" . $event->title . "</a>";
    echo "" . $event->title . "";
    echo '</td>';
    echo '<td>';
    $re = '%when':'s*</b>'s*(.|'s)<br '/><br '/>$/i';
    if (preg_match($re, $contents, $matches)) {
        $date = $matches;
    }
    echo $date;
    echo '</td>';
    echo '<td>';
    $re = '/^When':<'/b>()$/';
    if (preg_match($re, $contents, $matches)) {
        $location = $matches;
    }
    echo $location;
    echo '</td>';
    echo '<td>';
    echo "<a id=buttonRed href='$event->link' title='$event->title' target='_blank'>Click Here To Register</a>";
    echo '</td>';
    echo '</tr>';
}

这两个$res只是我尝试使用不同的regex表达式来获取数据。让我知道我哪里错了。感谢

以下内容应该会让您达到目的。(我写这篇文章是出于我的想法,它并没有完全遵循你的XML语法。但你已经明白了。)

<?php
$str = "<root><b>When:</b> whenwhen <b>Where:</b> wherewhere</root>";
$doc = new DOMDocument();
$doc->loadXML($str);
$when = $where = "";
$target = null;
foreach ($doc->documentElement->childNodes as $node) {
    if ($node->tagName == "b") {
        if (++$i == 1) {
            $target = &$when;
        } else {
            $target = &$where;
        }
    }
    if ($target !== null && $node->nodeType === XML_TEXT_NODE) {
        $target .= $node->nodeValue;
    }
}
var_dump($when, $where);

我遇到了这样的问题,最终使用了YQL。仔细看一下这里给出的页面抓取代码,尤其是select命令。然后转到控制台,放入您自己的select语句,指定所需节点的提要url和xpath。选择JSON格式。然后转到页面底部,获取REST查询url,并在jquery jsonp请求中使用它魔法

请不要通过正则表达式从XML文档中提取数据。

详细答案如下:https://stackoverflow.com/a/335446/313145

简短的回答是:使用regex并不容易,而且会经常中断。