2010-10-22 38 views
1

我试图得到一个XML文件进行排序,并没有运气。一天半之后,我需要专家的帮助。谢谢。如何对多维XML文件进行排序?

我的XML文件(简称为例子):

<?xml version="1.0" encoding="iso-8859-1"?> 
<deadlines> 
    <deadline> 
     <date>2010-06-01</date> 
     <text>Application for Summer Due</text> 
    </deadline> 
    <deadline> 
     <date>2010-07-01</date> 
     <text>Application for Fall Due</text> 
    </deadline> 
    <deadline> 
     <date>2010-07-31</date> 
     <text>Summer Bill Due</text> 
    </deadline> 
</deadlines> 

我的PHP:

<?php 

$xml = simplexml_load_file($_SERVER['DOCUMENT_ROOT'].'/feeds/deadlines.xml'); 

// start THIS WORKS 
echo'<pre>'; 
foreach($xml as $deadline) echo <<<EOF 
    Date: {$deadline->date} 
    Text: {$deadline->text} 


EOF; 
echo'</pre>'; 
// end THIS WORKS 

?> 

有没有人有一个简单的PHP的解决方案之前,排序上的 “日期” XML文件回显屏幕?

感谢

+0

[排序的SimpleXML对象的数组]的可能重复(http://stackoverflow.com/questions/2119686/sorting-an-array-of-simplexml-objects) – Gordon 2010-10-22 19:06:16

+0

由于戈登,但它不是一个重复。我在“对SimpleXML对象数组进行排序”中测试了代码,并且它们都不起作用。当通过simplexml_load_file()处理时,那里的解决方案不处理XML。 – 2010-10-26 13:03:52

+0

仍在寻找解决方案,如果有人试图对XML文件进行排序。在这4天内:(感谢。 – 2010-10-26 13:06:20

回答

5

好了,遗憾的房子周围发生之前 - 我加为了清楚而以不同的答案,但使用的排序代理技术,我挂。

function xsort(&$nodes, $child_name, $order=SORT_ASC) 
{ 
    $sort_proxy = array(); 

    foreach ($nodes as $k => $node) { 
     $sort_proxy[$k] = (string) $node->$child_name; 
    } 

    array_multisort($sort_proxy, $order, $nodes); 
} 

$structure = '<?xml version="1.0" encoding="utf-8" ?> 
<deadlines> 
    <deadline> 
     <date>2010-06-01</date> 
     <text>Application for Summer Due</text> 
    </deadline> 
    <deadline> 
     <date>2010-07-01</date> 
     <text>Application for Fall Due</text> 
    </deadline> 
    <deadline> 
     <date>2010-07-31</date> 
     <text>Summer Bill Due</text> 
    </deadline> 
</deadlines>'; 

$xml = simplexml_load_string($structure); 
$nodes = $xml->xpath('/deadlines/deadline'); 

// Sort by date, descending 
xsort($nodes, 'date', SORT_DESC); 
var_dump($nodes); 
+0

难道你不能用xpath?'$ xml-> xpath('/ deadlines/deadline/date')来做这个吗?' – Robin 2010-10-26 16:50:51

+0

罗宾,那只会给你一个日期数组,而不是OP所排序的截止日期节点 – 2010-10-26 17:26:14

+0

Nev ...刚刚从午餐回来,复制并粘贴你的代码并逐字运行它(但你已经知道:)所以我认为我可以移动它从这里转发并调整它 - 也就是说,我需要能够读取XML,我看到你已经将代码分配给$ var了,我将尽快处理它,然后很快回复。绿色的答案按钮在这个坏男孩 – 2010-10-26 18:10:17

相关问题