2010-08-19 2 views
2

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

$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 />"; 
       } 
      } 
     } 
    } 

ответ

0

Здесь:

<?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]; 

?> 
+0

$ последний содержит последний элемент, но Эшли просил «и _second_ последнего» – VolkerK

+0

Я изменил код, спасибо за замечание ... – Otar

2

Update: Если у вас есть эти 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

Yay спасибо так много - работает удовольствие! :) – Ashley

Смежные вопросы