2013-02-27 89 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