2009-10-01 2 views
1

У меня есть xml-файл, который я хочу сохранить атрибут рангов узла в переменной.Как получить только требуемые элементы xpath?

Я пробовал:

echo $var = $xmlobj->xpath("//Listing[@rank]"); 

без толку, он просто печатает ArrayArray.

Как это можно сделать?

if($xmlobj = simplexml_load_string(file_get_contents($xml_feed))) 
     { 
      foreach($xmlobj as $listing) 
      { 

        // echo 'Session ID: ' . $sessionId = $listing->sessionId . '<br />'; 
        // echo 'Result Set: ' . $ResultSet = $listing->ResultSet . '<br />'; 

        print_r($xmlobj->xpath("//Listing[@rank]")); 

        // $result = $xmlobj->xpath("/page/"); 
        // print_r($result); 

      } 
     } 

предложение Хенрика:

foreach($xmlobj as $listing) 
{ 
     $var = $xmlobj->xpath("//Listing[@rank]"); 

     foreach ($var as $xmlElement) 
     { 
      echo (string)$xmlElement; 
     } 
} 

Здесь вы идете

<page> 
    <ResultSet id="adListings" numResults="3"> 
     <Listing rank="1" title="Reliable Local Moving Company" description="TEST." siteHost="www.example.com"> 
     </Listing> 

ответ

2

Редактировать после игры вокруг с публикуемым Примером XML:

  • Моего первоначальным ответом было несколько отстает - литье в строку даст вам внутренний текст из выбранных элементов, если они имеют один (не тот случай)
  • "//Listing[@rank]" выбирает все элементы «» Листинг что имеют а «ранг» атрибута. Если вы хотите выбрать сами атрибуты, используйте "//Listing/@rank"
  • Для вывода атрибута используйте SimpleXMLElement синтаксис массива: $xmlElement['rank']

Так что в вашем случае:

foreach($xmlobj as $listing) 
{ 
    $var = $xmlobj->xpath("//Listing/@rank"); 
    foreach ($var as $xmlElement) 
    { 
     echo $xmlElement['rank']; 
    } 
} 

или

foreach($xmlobj as $listing) 
{ 
    $var = $xmlobj->xpath("//Listing[@rank]"); 
    foreach ($var as $xmlElement) 
    { 
     echo $xmlElement['rank']; 
     echo $xmlElement['title']; // Added to demonstrate difference 
    } 
} 

должен работать.

В первом случае элемент $ xmlElement будет содержать атрибут «rank», а во втором - полный элемент «Листинг» (следовательно, позволяющий выводить заголовок).

+0

Спасибо за ответ Хенрик. К сожалению, это не работает, моя реализация вашего кода выше? –

+0

Хм, странно - что он печатает? –

+0

Просто пустой экран и никаких ошибок –

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