【问题标题】:XML typeof return nothing (PHP + RSS)XML typeof 什么都不返回(PHP + RSS)
【发布时间】:2018-10-19 08:12:24
【问题描述】:

我有一个非常烦人的问题。我正在获取 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** 来获取我的描述标签内的图像,但我没有任何回报,可能是由于这个标签中的数据格式。

【问题讨论】:

  • 你的description 元素在这里只包含text,所以你不能去里面寻找elements。您需要先使用html_entity_decode 或类似的东西对其进行解码。
  • 我尝试使用 htmlspecialchars,但这部分没有被检测为 xml
  • 你不能一口气做到这一点。您需要先获取描述元素的内容,解码 that,然后继续在其中查找您要查找的元素。
  • 好的,但是我该怎么做呢?
  • 嗯,你甚至还没有告诉我们你是如何解析这个以将内容放入你的 $rss 变量中的……(该描述的内容可能不一定是有效的 XML 开头,因此您可能需要为 this 部分切换到 HTML 解析器。)

标签: php xml rss


【解决方案1】:

由于我已经从您提供的示例数据中加载了 $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"];

这需要&lt;item&gt; 元素并提取&lt;description&gt; 元素,然后对其进行解码。然后将其加载到另一个 SimpleXML 元素中(因为它是一个 HTML 片段,我将它包含在根标记中)并使用 XPath 找到具有相应 typeof 值的正确 &lt;img&gt; 标记。

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

其中有一些流氓属性,&amp;title 的替换所做的就是删除它们以使负载能够工作。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2011-09-13
      • 2015-11-18
      • 2023-04-10
      • 2015-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多