Первый и второй последние узлы xml - PullRequest
2 голосов
/ 19 августа 2010

Мне нужны только первый и второй последние узлы области - как бы я это сделал здесь?

$url = "http://developer.multimap.com/API/geocode/1.2/OA10081917657704697?qs=Byker&countryCode=GB";
   $results = simplexml_load_file($url);
    foreach($results->Location as $location) {
        echo "<hr />";
        foreach($location->Address as $address) {
            foreach($address->Areas as $areas) {
                foreach($areas->Area as $area) {
                    echo $area;
                    echo "<br />";
                }
            }
        }
   }

Ответы [ 2 ]

2 голосов
/ 19 августа 2010

Обновление: если у вас есть эти циклы foreach, вы можете просто использовать:

$url = "http://developer.multimap.com/API/geocode/1.2/OA10081917657704697?qs=Byker&countryCode=GB";
$results = simplexml_load_file($url);
foreach($results->Location as $location) {
  foreach($location->Address as $address) {
    foreach( $address->Areas as $areas) {
      // <-- todo: add test if those two elements exist -->
      echo $areas->Area[0], ' - ', $areas->Area[count($areas->Area)-1], "\n";
    }
  }
}

Для этого вы можете использовать XPath .

<?php
$doc = new SimpleXMLElement('<foo>
  <bar>a</bar>
  <bar>b</bar>
  <bar>c</bar>
  <bar>x</bar>
  <bar>y</bar>
  <bar>z</bar>
</foo>');

$nodes = $doc->xpath('bar[position()=1 or position()=last()-1]');
foreach( $nodes as $n ) {
  echo $n, "\n";
}

печать

a
y

см. Также:

0 голосов
/ 19 августа 2010

Вот оно:

<?php

    $url = 'http://developer.multimap.com/API/geocode/1.2/OA10081917657704697?qs=Byker&countryCode=GB';
    $results = simplexml_load_file($url);
    $areas = array();
    foreach ($results->Location->Address->Areas->Area as $area)
    {
        $areas[] = (string) $area;
    }

    $first = $areas[0];

    $second_last = $areas[count($areas)-2];

?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...