按字段顺序对象simplexml_load_file

时间:2010-04-07 07:06:11

标签: php object

嗨我有一个simplexml_load_file的问题,我不太确定如何通过$ item-> padre命令我的数组。

我需要通过$ item-> padre。来做foreach和订购。=,我不知道该怎么做。

function create_sitemap($sitemap){

 $xml = file_exists('sitemap.xml') ? $xml = simplexml_load_file('sitemap.xml'): exit('Failed to open sitemal.xml.');

 $xml = uasort($xml, function($a,$b){ return strcmp($a->padre, $b->padre); });


 foreach ($xml->url as $item) {

   echo "<p>" . $item->loc. "</p>";
   echo "<p>" . $item->padre . "</p>";

 } 

}

提前致谢。

1 个答案:

答案 0 :(得分:1)

$xml不是array,而是SimpleXMLElement,因此usort()不会以这种方式运作。
但是例如SimpleXMLElement->xpath()返回一个数组,您可以使用它来查找所有<url>元素。

create_sitemap('test');

function create_sitemap($sitemap){
  $xml = getData();
  $urls = $xml->xpath('url');

  uasort($urls, function($a,$b){ return strcmp($a->padre, $b->padre); });

  foreach ($urls as $item) {
    echo "<p>{$item->loc}</p><p>{$item->padre}</p>\n";
  } 
}

function getData() {
  return new SimpleXMLElement('<xml>
    <url>
      <loc>loc Z</loc>
      <padre>padre Z</padre>
    </url>
    <url>
      <loc>loc A</loc>
      <padre>padre A</padre>
    </url>
    <url>
      <loc>loc C</loc>
      <padre>padre C</padre>
    </url>
    <url>
      <loc>loc B</loc>
      <padre>padre B</padre>
    </url>
  </xml>');
}

打印

<p>loc A</p><p>padre A</p>
<p>loc B</p><p>padre B</p>
<p>loc C</p><p>padre C</p>
<p>loc Z</p><p>padre Z</p>

您可能也对xslt

感兴趣