【问题标题】:Reordering RSS feed using PHP使用 PHP 重新排序 RSS 提要
【发布时间】:2013-02-27 14:39:47
【问题描述】:

我需要过滤并重新排序 RSS 提要。

使用PHP,如何检测url="" 外壳中是否存在链接?

其中大部分将是空的,但我想将在此标记中具有链接的整个项目移到顶部。

这是我将使用的代码示例。我猜我会使用isset?比如:

if (isset($enclosure)){
    HOW WOULD I SELECT THE PARENT ITEM? AND EVERYTHING IN IT? AND THEN MOVE IT TO THE TOP?
}

<item>
    <title><![CDATA[Article title 1]]></title>
    <link><![CDATA[http://www.articlelinkone.com]]></link>
    <pubDate><![CDATA[Tue, 26 Feb 2013 15:45:00 EDT]]></pubDate>
    <description><![CDATA[Article discription 1<br />Some HTML will exist]]></description>
    <enclosure url="" type="image/jpeg"></enclosure>
    <thumbnail url="" type="image/jpeg"></thumbnail>
    <summary><![CDATA[Summary for article]]></summary>
    <guid><![CDATA[Guide for article]]></guid>
    <source url="http://www.article.com/"/>
</item> 
<item>
    <title><![CDATA[Article title 1]]></title>
    <link><![CDATA[http://www.articlelinkone.com]]></link>
    <pubDate><![CDATA[Tue, 26 Feb 2013 15:45:00 EDT]]></pubDate>
    <description><![CDATA[Article discription 1<br />Some HTML will exist]]></description>
    <enclosure url="" type="image/jpeg"></enclosure>
    <thumbnail url="" type="image/jpeg"></thumbnail>
    <summary><![CDATA[Summary for article]]></summary>
    <guid><![CDATA[Guide for article]]></guid>
    <source url="http://www.article.com/"/>
</item> 
<item>
    <title><![CDATA[Article title 1]]></title>
    <link><![CDATA[http://www.articlelinkone.com]]></link>
    <pubDate><![CDATA[Tue, 26 Feb 2013 15:45:00 EDT]]></pubDate>
    <description><![CDATA[Article discription 1<br />Some HTML will exist]]></description>
    <enclosure url="http://articleone.com/image1.jpg" type="image/jpeg"></enclosure>
    <thumbnail url="http://articleone.com/thumb/image1.jpg" type="image/jpeg"></thumbnail>
    <summary><![CDATA[Summary for article]]></summary>
    <guid><![CDATA[Guide for article]]></guid>
    <source url="http://www.article.com/"/>
</item> 
<item>
    <title><![CDATA[Article title 1]]></title>
    <link><![CDATA[http://www.articlelinkone.com]]></link>
    <pubDate><![CDATA[Tue, 26 Feb 2013 15:45:00 EDT]]></pubDate>
    <description><![CDATA[Article discription 1<br />Some HTML will exist]]></description>
    <enclosure url="" type="image/jpeg"></enclosure>
    <thumbnail url="" type="image/jpeg"></thumbnail>
    <summary><![CDATA[Summary for article]]></summary>
    <guid><![CDATA[Guide for article]]></guid>
    <source url="http://www.article.com/"/>
</item> 

【问题讨论】:

    标签: php xml rss


    【解决方案1】:

    以下是使用SimpleXML 检查附件 URL 是否为空的方法:

    <?php
    $xml = new new SimpleXMLElement($xml_content)
    foreach( $xml->item AS $item ) {
        if( !empty( $item->enclosure['url'] ))
            // Do whatever you want
    }
    

    根据你想要做什么,你可以把$item放到一个新的数组中,构建一个新的XML文件等等。

    【讨论】:

    • 使用这个函数,我如何选择整个父节点并移动到顶部?
    • 整个 节点位于 $item 中(因为 $xml-&gt;item 是一个数组,其中包含在 XML 文件中找到的所有 )。您可以将其设置在另一个 XML 文件的顶部。您应该take a look here 了解如何使用 SimpleXML 创建 XML 文件。
    【解决方案2】:

    你看过SimpleXML吗?您将能够轻松地反转 xml 对象中的项目,例如:

    $str = file_get_contents($url);
    $xml = simplexml_load_string($str);
    $items = array_reverse($xml->xpath('item'));
    

    【讨论】:

    • +1 另外... SimpleXML 可以与 DOMXML 互换(下面也附有教程)。
    【解决方案3】:

    我觉得你真的应该看看 php dom xml

    DOM XML 的简单示例:

    <?php
    $xmlDoc = new DOMDocument();
    $xmlDoc->load("note.xml");
    
    $x = $xmlDoc->documentElement;
    foreach ($x->childNodes AS $item)
      {
      print $item->nodeName . " = " . $item->nodeValue . "<br>";
      }
    ?> 
    

    You may read the full tutorial on W3Schools (recommended)

    【讨论】:

    • 如果我理解正确,我会将 xml 带入 DOM,对其进行操作,然后将操作后的数据导出回 xml 文件?我一直在尝试使用我在上面发布的 xml 数据来解决这个问题。这是你会做的吗? w3schools.com/dom/tryit.asp?filename=try_dom_clonenode
    • 是的,我的朋友。虽然 SimpleXML 更易于使用,但 DOMXML 更强大,尤其是在解析大文件时。您可以从上面用户指定的 SimpleXML 开始,然后如果您需要更多功能,可以切换到 DOMXML。如前所述,DOMXML 和 SimpleXML 是可互换的,因此使用 SimpleXML 的代码将适用于 DOMXML。始终尝试在此主题上使用 OOP 概念,因为如果您决定切换,它会让您的生活更轻松:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-07
    • 2011-07-05
    • 2012-06-17
    • 1970-01-01
    • 1970-01-01
    • 2015-05-10
    • 2010-10-07
    相关资源
    最近更新 更多