XML typeof ничего не возвращает (PHP + RSS) - PullRequest
0 голосов
/ 19 октября 2018

У меня довольно неприятная проблема.Я получаю поток 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:

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

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

И мне (кажется, мне) нужно использовать ** typeof = \ "foaf: Image **, чтобы получить изображение внутри моего тега описания, но я ничего не получаю взамен, возможно, из-за формата данных вэтот тег.

Ответы [ 2 ]

0 голосов
/ 19 октября 2018

Это то, что я закончил, и это работает, если это могло бы помочь ...

preg_match('/img.+src=[\'"](?P<src>.+?)[\'"].*>/i', $item->description, $image);
$image['src']
0 голосов
/ 19 октября 2018

Поскольку я загрузил $ 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 для поиска правильного тега <img> с соответствующим значением typeof.

Последняя строка простоиспользует первое совпадение из выражения XPath и выводит атрибут src.

Там есть некоторые неконтролируемые атрибуты, которые заменяет &title, удаляя их, чтобы нагрузка работала.

...