如何循环遍历从XPath部分匹配创建的数组以显示XML元素

时间:2015-04-27 09:56:05

标签: php xml xpath rss

我一直在研究这个问题已经有一段时间了,我处在一个完整的区域,我不确定我是否会采用正确的方式。

我所拥有的是我网站上显示的RSS源。我创建了一个搜索框,我要求它与XML的标题/描述部分匹配。

  <?php
    $xml = <<<XML
    XML;
    $sxe = simplexml_load_file('http://www.music-news.com/rss/news.asp');
    $searchKeyword = $_POST["SearchBox"];
    $area = $sxe->xpath("//item[contains(title,'".$searchKeyword."')]");
    print_r($area);
   ?> 

从搜索框的提交按钮调出此代码时,会显示一个只显示以下内容的页面

Array ( [0] => SimpleXMLElement Object ( [title] => SimpleXMLElement Object ( ) [description] => SimpleXMLElement Object ( ) [link] => SimpleXMLElement Object ( ) [pubDate] => Mon, 27 Apr 2015 10:01:00 GMT [guid] => SimpleXMLElement Object ( ) [author] => SimpleXMLElement Object ( ) ) )

它会在RSS提要中恢复正确的记录(可以从发布日期确定)。但是我试图得到它,以便搜索结果显示为原始RSS提要在网站上显示。初始RSS提要的代码在

之下
<?php

$rss = simplexml_load_file('http://www.music-news.com/rss/news.asp');

foreach ($rss->channel->item as $item) 
{
echo "<h2>" .$item->title . "</h2>";
echo "<p>" . $item->pubDate . "</p>";
echo "<p>" . $item->description .  "</p>";
echo '<p><a href="'. $item->link .'">' .ReadMore. "</a><p>";
} 
?>

非常感谢任何帮助

提前致谢

1 个答案:

答案 0 :(得分:0)

$area应该是一个零到多个simplexml - 元素的数组,所以请使用:

foreach($area as $item) {
    echo "<h2>" .$item->title . "</h2>";
    echo "<p>" . $item->pubDate . "</p>";
    // and so on
} 

查看一个工作示例:https://eval.in/319904

顺便说一下,你应该清理$searchKeyword以防止任何有害的输入,请参阅Cleaning/sanitizing xpath attributes,特别是最受好评的答案有关于使用PHP进行消毒的最后一段。