2013-02-27 91 views
1

我需要过滤并重新订购RSS订阅源。使用PHP重新排序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> 

回答

1

我觉得你真的应该看看PHP的XML DOM XML DOM的

简单的例子:

<?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)

+0

如果我正确地理解了这一点,我会把xml带入DOM,操纵它,然后导出操纵数据回到一个XML文件?我一直在尝试使用上面发布的xml数据来处理这个问题。这是你会做什么? http://www.w3schools.com/dom/tryit.asp?filename=try_dom_clonenode – mkrisch 2013-02-27 21:30:05

+0

是的,这是我的朋友。虽然SimpleXML更易于使用,但DOMXML功能更强大,特别是解析大型文件。您可以从上面的用户指定的SimpleXML开始,然后如果您需要更多的权力,可以切换到DOMXML。如前所述,DOMXML和SimpleXML是可互换的,所以使用SimpleXML的代码将与DOMXML一起工作。总是尝试使用面向对象的概念关于这个问题,因为它让你的生活更轻松,如果你决定切换:) – 2013-02-28 08:08:42

+1

这个伎俩! – mkrisch 2013-02-28 16:34:44

2

你看着SimpleXML?您可以轻松地逆转的东西,如XML对象中的项目:

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

+1另外... SimpleXML可以与DOMXML互换(下面还附有教程)。 – 2013-02-27 15:08:11

3

这里是你如何检查机箱的网址是不是空的,SimpleXML

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

根据你想要做什么,你可以把$item放在一个新的阵列中,建立一个新的XML文件等。

+0

使用这个函数,我将如何选择整个父节点并移动到顶部? – mkrisch 2013-02-27 21:01:06

+0

整个节点位于'$ item'中(因为'$ xml-> item'是一个在XML文件中找到所有的数组)。您可以将其设置在另一个XML文件的顶部。你应该[看看这里](http://stackoverflow.com/questions/143122/using-simplexml-to-create-an-xml-object-from-scratch)来看看如何用SimpleXML创建一个XML文件。 – Arthur 2013-02-28 09:06:30