2010-01-20 61 views
2

我neeed由ID如何订购的SimpleXML循环

我的XML文档看起来像这样

<gig id="16"> 
     <date>Fri. 23rd Apr</date> 
     <venue>Sneaky Pete's</venue> 
     <area>Edinburgh</area> 
     <telephone>www.ticketweb.co.uk</telephone> 
     <price>£10</price> 
     <time>Time TBA</time> 
    </gig> 

所以为了我的循环,你可以看到,我需要通过这个ID来订购我的字符串

我的输出代码是

<?php 
foreach ($xml->gig as $dateof){ 
echo '<tr><td><img src="images/arrow.jpg" /></td><td width="200px" class="loop-Date">' . $dateof->date . '</td><td width="700px">' . $dateof->venue . '</td></tr>'; 
} 
?> 

希望这是有道理的

回答

0

有没有订单通过在(标准)的xpath选项,但在xsl(t)有例如​​

1
$array = array(); 
foreach ($xml->gig as $gig) { 
    $id = (int)$gig->attributes()->id; 
    $array[$id] = $gig; 
} 

排序ID:ksort($array);

foreach ($array as $id => $gig) { 
    echo '<tr><td><img src="images/arrow.jpg" /></td><td width="200px" class="loop-Date">' . (string)$gig->date . '</td><td width="700px">' . (string)$gig->venue . '</td></tr>'; 
} 

永远不要忘记铸SimpleXMLObjects到字符串(或整数,...)。

+0

你是比我快:) BTW:在第二块的第二行,你需要更换'$ dateof'成' $ gig'。 – Veger 2010-01-20 10:06:14

+0

谢谢Veger。 感谢r3zn1k您的帮助:-) – 2010-01-20 10:09:40

+0

我似乎无法得到它的工作,它只是显示的空白,没有错误只是看起来像它没有得到的值????? – 2010-01-20 10:16:00

0

我经常看到请求XML元素,通常基于XPath查询的结果进行排序。

为此我写了一个方法,sortedXPath(),为SimpleDOM。它具有不同的是第一个参数是XPath表达式和,而不是使用数组键它使用XPath表达式相同的签名array_multisort()。例如,这里是如何检索所有<gig/>元素,通过他们的id属性进行排序:

include 'SimpleDOM.php'; 

$gigs = simpledom_load_string(
    '<gigs> 
     <gig id="16"> 
      <date>Fri. 23rd Apr</date> 
     </gig> 
     <gig id="15"> 
      <date>Fri. 16th Apr</date> 
     </gig> 
    </gigs>' 
); 

foreach ($gigs->sortedXPath('//gig', '@id') as $gig) 
{ 
    echo 'gig id ', $gig['id'], ' - date: ', $gig->date, "\n"; 
}