试图从一个RSS源

试图从一个RSS源

问题描述:

这解析图像和文字是线程这里的延续:Trying to Parse Only the Images from an RSS Feed试图从一个RSS源

这一次,我想从一个RSS feed解析图像和某些项目。 RSS提要的采样是这样的:

<channel> 
<atom:link href="http://mywebsite.com/rss" rel="self" type="application/rss+xml" /> 

<item> 
<title>Article One</title> 
<guid isPermaLink="true">http://mywebsite.com/details/e8c5106</guid> 
<link>http://mywebsite.com/geturl/e8c5106</link> 
<comments>http://mywebsite.com/details/e8c5106#comments</comments>  
<pubDate>Wed, 09 Jan 2013 02:59:45 -0500</pubDate> 
<category>Category 1</category>  
<description> 
     <![CDATA[<div> 
     <img src="http://mywebsite.com/myimages/1521197-main.jpg" width="120" border="0" /> 
     <ul><li>Poster: someone's name;</li> 
     <li>PostDate: Tue, 08 Jan 2013 21:49:35 -0500</li> 
     <li>Rating: 5</li> 
     <li>Summary:Lorem ipsum dolor </li></ul></div><div style="clear:both;">]]> 
     </description> 
</item> 
<item>.. 

下面我有,我尝试解析图像和文字下面的代码:

$xml = simplexml_load_file('http://mywebsite.com/rss?t=2040&dl=1&i=1'); 

$descriptions = $xml->xpath('//item/description'); 
$mytitle= $xml->xpath('//item/title'); 

foreach ($descriptions as $description_node) { 
    // The description may not be valid XML, so use a more forgiving HTML parser mode 
    $description_dom = new DOMDocument(); 
    $description_dom->loadHTML((string)$description_node); 

    // Switch back to SimpleXML for readability 
    $description_sxml = simplexml_import_dom($description_dom); 

    // Find all images, and extract their 'src' param 
    $imgs = $description_sxml->xpath('//img'); 
    foreach($imgs as $image) { 
     echo "<img id=poster class=poster src={$image['src']}> {$mytitle}"; 
     } 
    } 

上面的代码精美提取图像....但是,当我尝试在我的代码的最后一行时,它不会提取$ mytitle(这将是“Article One”)标记。这应该是从RSS提要中的所有项目中提取的。

任何人都可以帮我找出这一个请。

非常感谢,

赫尔南

+0

XPath是正确的。也许你需要在'$ mytitle'上调用' - > nodeValue'来获取节点内容。 – helderdarocha

+0

其实,因为你有很多'item'元素,你将需要使用' - > item(0)'来获得第一个元素。 – helderdarocha

+0

谢谢Helderdarocha ......不幸的是,我的知识并不先进,我无法理解你的解释。问题是我必须提取字段内的内容以及字段中的内容。这将在RSS提要中重复多次,这正是我想要的。 – <span class="text-secondary"> <small> <a rel="noopener">Hernandito</a></small></span> <span></span>

xpath()总是返回一个数组(见http://www.php.net/manual/en/simplexmlelement.xpath.php),哪怕只是一个元素是结果。如果你知道你会期望一个元素,你可以简单地使用$mytitle[0]

您将不得不迭代每个<item/>元素,否则您无法知道哪个说明和哪个标题属于一起。所以下面应该工作:

顺便说一句,我还添加了“”给你你<img/>元素。我想你想要,因为这看起来非常像XML/HTML。

+0

谢谢Dirkk ...我认为我们正在接近... RSSS有多个项目,我想刮。每个项目都有一个嵌入式“标题”和上面我的代码工作的图像。因此,在我的foreach中,我想刮掉并回显相应的图像以及Feed中每个项目的相应“标题”。您的代码为Feed中的所有商品返回了相同的标题。 – Hernandito

+0

@Hernandito我更新了我的答案。您必须稍微调整程序的逻辑,否则描述和标题将始终彼此无关。您应该迭代每个“item”,然后查找所需的元素。 – dirkk

+0

Dirkk ....它就像一个魅力!试图解决这个问题的2天试用和错误。非常感谢你!!! – Hernandito