XML typeof return 什么都没有 (PHP + RSS)

XML typeof return nothing (PHP + 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** 来获取我的描述标签中的图像,但我在 return 中什么也没有,可能是由于格式的原因此标签中的数据。

由于我已经从您提供的样本数据中加载了 $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 的替换是删除它们以使负载正常工作。

这就是我最终得到的,它正在工作,如果它可以帮助...

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