2012-02-08 70 views
0

我有一個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>..... 

如何我拉出來當數據:和其中:分別?我試圖使用正則表達式,但我不確定如果我沒有正確訪問數據或如果我的正則表達式是錯誤的。我沒有設置使用正則表達式。

這是我的代碼:

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>'; 
} 

兩個$資源只是我試圖讓出來的數據使用不同的正則表達式的表達式。讓我知道我要去哪裏錯了。謝謝

+0

不要冷靜地對待他。他說他沒有和正規表達式結婚。只要告訴他你會怎麼做。 – 2012-02-08 17:49:14

+0

謝謝,正如喬納森所說。我不是說我必須使用正則表達式。我首先嚐試了一些strpos,但沒有正確加載。我只想知道如何獲得這些特定的數據領域。 – wiseman7687 2012-02-08 17:53:48

+0

@JonathanM:他之前被告知。 http://stackoverflow.com/questions/7969090/preg-match-help-cannot-read-string-from-email – mario 2012-02-08 17:57:03

回答

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); 
+0

好的DOM答案。 – 2012-02-08 18:12:55

+0

謝謝。這讓我朝着正確的方向前進。我也讚賞你的迴應喬恩。 – wiseman7687 2012-02-08 18:23:02

-2

請不要通過正則表達式從XML文檔提取數據。

長答案是在這裏:https://stackoverflow.com/a/335446/313145

簡短的回答是:這是不是更容易使用正則表達式和將打破頻繁。

+0

我不想使用正則表達式,我只是無法正確檢索我的數據,所以這是我最近的嘗試。你有什麼建議? – wiseman7687 2012-02-08 17:37:36

+1

也許這會更適合作爲評論,而不是答案? – xbonez 2012-02-08 17:38:09

1

我有這樣一個問題,我結束了使用YQL。仔細看看那裏給出的分頁代碼,特別是select命令。然後去console並放入您自己的select語句,指定供稿網址和xpath到您想要的節點。選擇JSON格式。然後進入頁面底部,獲取REST查詢url,並在jquery jsonp request中使用它。 魔術!

+0

謝謝,我會看看這個。 – wiseman7687 2012-02-08 17:54:25

相關問題