XML typeof不返回任何内容(PHP + RSS)

时间:2018-10-19 08:12:25

标签: php xml rss

我有一个很烦人的问题。我正在收到RSS流。

我需要获取 标记内的图像。但是如您所见,RSS流程并未得到优化。

请参阅以下示例:

<item>
    <title>Element !</title>
    <link>
    link</link>
    <description>&lt;div class=&quot;field field-name-field-image field-type-image field-label-hidden&quot;&gt;&lt;div
        class=&quot;field-items&quot;&gt;&lt;div class=&quot;field-item even&quot; rel=&quot;og:image rdfs:seeAlso&quot;
        resource=&quot;http://www.test.com/sites/default/files/field/image/image.jpg&quot;&gt;&lt;img typeof=&quot;foaf:Image&quot;
        src=&quot;http://www.test.com/sites/default/files/field/image/image.jpg&quot; width=&quot;800&quot; height=&quot;571&quot;
        alt=&quot;&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;field field-name-body
        field-type-text-with-summary field-label-hidden&quot;&gt;&lt;div class=&quot;field-items&quot;&gt;&lt;div class=&quot;field-item
        even&quot; property=&quot;content:encoded&quot;&gt;&lt;p&gt;Bien que le pain reste &lt;strong&gt;un aliment
        emblématique de la culture française&lt;/strong&gt;, il n’échappe pas aux évolutions des modes de vie. Selon une
        étude du Crédoc, publiée en 2017 par l’observatoire du pain, ce dernier subi un effet de génération négatif. Au
        même âge, les nouvelles générations consommeraient moins de pain que les anciennes. Cependant, en analysant d’un
        peu plus près leurs habitudes, il a été constaté qu’ils consommeraient plus de pain sous forme de sandwich ou
        hamburger que les générations précédentes.&lt;/p&gt;
        &lt;p&gt;C’est donc pour répondre à une demande croissante de pain moelleux, type pain de mie, que nous avons
        imaginé « Le Moelleux Tradition ». &lt;strong&gt;Élaboré par le MOF, Jean-Yves Guinard&lt;/strong&gt;, sa
        recette, n’est réalisable que sur la base exclusive de farine de tradition Française « La Croquise ». Mis au
        point selon &lt;strong&gt;un procédé unique&lt;/strong&gt;, ce pain moelleux, à la recette innovante, se
        caractérise par &lt;strong&gt;une croûte très fine et une mie extrêmement moelleuse&lt;/strong&gt;.&lt;/p&gt;
        &lt;p&gt;&lt;strong&gt;Sans additif, sucre ni matière grasse&lt;/strong&gt;, sa composition des plus salutaire,
        saura séduire tous les clients en quêtes d’authenticité et de naturel. En effet, suite aux différentes crises
        sanitaires et médiatiques, les consommateurs se disent de plus en plus inquiets quant aux ingrédients qu’ils
        mangent. C’est pourquoi, ils sont plus impliqués et regardants quant aux composants de leurs aliments.&lt;/p&gt;
        &lt;p&gt;Dans une volonté constante d’accompagner au plus près nos artisans boulangers, nous avons conçu,
        spécialement pour l’occasion, une barquette des plus attrayantes. Inédite en boulangerie artisanale, cette
        barquette aux couleurs de la Croquise mettra en avant ce nouveau pain et lui apportera un maximum de visibilité.
        &lt;/p&gt;
        &lt;p&gt;Pour télécharger notre argumentaire de vente, cliquez sur le lien ci-dessous :&lt;br /&gt;&lt;a href=&quot;http://www.test.com/sites/all/themes/nexus/images/pdf-telecharger/pdf.pdf&quot;
        target=&quot;_blank&quot;&gt;&lt;strong&gt;&lt;u&gt;Télécharger l&#039;argumentaire&lt;/u&gt;&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
        &lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;ul class=&quot;links inline&quot;&gt;&lt;li class=&quot;addtoany first
        last&quot;&gt;&lt;span&gt;&lt;span class=&quot;a2a_kit a2a_kit_size_32 a2a_target addtoany_list&quot; id=&quot;da2a_1&quot;&gt;
        &lt;a class=&quot;a2a_button_facebook&quot;&gt;&lt;/a&gt;
        &lt;a class=&quot;a2a_button_twitter&quot;&gt;&lt;/a&gt;
        &lt;a class=&quot;a2a_button_google_plus&quot;&gt;&lt;/a&gt;
        &lt;a class=&quot;a2a_dd addtoany_share_save&quot; href=&quot;https://www.addtoany.com/share#url=http%3A%2F%2Fwww.test.com%2Fcontent%2Ftest&amp;amp;title=La%20Croquise%20fait%20sa%20rentr%C3%A9e%20avec%20son%20Moelleux%20Tradition%20%21&quot;&gt;&lt;/a&gt;

        &lt;/span&gt;
        &lt;script type=&quot;text/javascript&quot;&gt;
        &lt;!--//--&gt;&lt;![CDATA[//&gt;&lt;!--
        if(window.da2a)da2a.script_load();
        //--&gt;&lt;!]]&gt;
        &lt;/script&gt;&lt;/span&gt;&lt;/li&gt;
        &lt;/ul&gt;
    </description>
    <pubDate>Thu, 27 Sep 2018 13:08:31 +0000</pubDate>
</item>

我有用于通过RSS的代码:

<?php
 $url = "myfile.xml";
    $rss = simplexml_load_file($url);

foreach ($rss->channel->item as $item) {
    // echo "<pre>".print_r(htmlspecialchars($item->description), true)."</pre>";
    var_dump($item->xpath('description/typeof="foaf:Image"'));
    // echo "<pre>".print_r($item->xpath("typeof=\"foaf:Image\""), true)."</pre>";
    $i++;
    if ($i < 4) {
        $itemsReturned[] = array(
            $item,
        );
    }
}
?>

我(我想)需要使用** typeof = \“ foaf:Image **来获取图像到我的描述标签中,但是我没有任何回报,这可能是由于该标签中的数据格式所致。

2 个答案:

答案 0 :(得分:0)

当我从您提供的示例数据中加载$ item时,我希望这会起作用...

//$item = simplexml_load_string($data);
$content = "<content>".html_entity_decode($item->description)."</content>";
$content = str_replace("&title","title",$content);
$description = simplexml_load_string($content);
$img = $description->xpath('//img[@typeof="foaf:Image"]');
echo (string)$img[0]["src"];

这将使用<item>元素并提取<description>元素,然后对其进行解码。然后将其加载到另一个SimpleXML元素(因为它是HTML片段,我将其封装在根标签中),并使用XPath查找具有相应typeof值的正确的<img>标签。

最后一行仅使用XPath表达式中的第一个匹配项,并输出src属性。

其中存在一些流氓属性,替换&title所做的就是删除它们以使负载正常工作。

答案 1 :(得分:0)

这是我最终得到的结果,并且可以工作,如果可以的话...

preg_match('/img.+src=[\'"](?P<src>.+?)[\'"].*>/i', $item->description, $image);
$image['src']