【问题标题】:How do you capture certain data from description field in RSS feed?您如何从 RSS 提要的描述字段中捕获某些数据?
【发布时间】:2012-02-08 17:35:08
【问题描述】:

我正在阅读一个 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>.....

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

这是我的代码:

    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 只是我尝试使用不同的正则表达式获取数据。让我知道我哪里出错了。谢谢

【问题讨论】:

  • 不要对他投反对票。他说他不喜欢正则表达式方法。让他看看你是怎么做的。
  • 谢谢,正如乔纳森所说。我并不是说我必须使用正则表达式。我也先尝试了一些 strpos,但加载不正确。我只是想知道如何获取那些特定的数据字段。
  • @JonathanM:他之前被告知过。 stackoverflow.com/questions/7969090/…

标签: php html regex rss


【解决方案1】:

以下内容应该可以帮助您到达那里。 (我从头到尾写了这个,它不完全遵循你的 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);

【讨论】:

  • 谢谢。这让我朝着正确的方向前进。我也很感谢你的回应乔恩。
【解决方案2】:

我遇到了这样的问题,最终我使用了YQL。好好看看那里给出的页面抓取代码,尤其是 select 命令。然后转到console 并放入您自己的选择语句,将提要网址和xpath 指定到您想要的节点。选择 JSON 格式。然后下到页面底部,获取 REST 查询 url,并在 jquery jsonp request 中使用它。 魔法!

【讨论】:

  • 谢谢,我会看看这个。
【解决方案3】:

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

长答案是例如这里:https://stackoverflow.com/a/335446/313145

简短的回答是:使用正则表达式并不容易,而且会经常中断。

【讨论】:

  • 我不想使用正则表达式,我只是无法正确检索我的数据,所以这是我最近的尝试。你有什么推荐?
  • 也许这更适合作为评论而不是答案?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多