Рабочий пример simpleXML?

Похоже, что есть много проблем с simpleXML в PHP. Я использую последнюю версию php для Windows, и я просто не могу получить основные примеры simpleXML для работы, как в документации.

Мой xml-файл:

<?xml version="1.0" encoding="ISO-8859-1"?> <programme> <title>Billy Bushwaka</title> <episodeNumber>2</episodeNumber> <description>Billy Bushwaka entertains</description> <url>play.swf</url> </programme> 

Моя программа PHP:

 <?php $xml = simplexml_load_file("local.xml"); $result = $xml->xpath("//programme"); echo "Title: " . $result . "</br>"; ?> 

Все, что я получаю, это следующее:

Название: Массив

Как я могу получить «Название: Билли Бушвака»?

Нет повторений данных XML, поэтому я не хочу использовать массивы.

SimpleXML 101

  1. Прежде всего, всегда указывайте свои переменные PHP после узла, который они представляют.

     // the root node is <programme/> $programme = simplexml_load_file("local.xml"); 
  2. Доступ к детям (узлам), как если бы они были объектами.

     echo $programme->title; 
  3. Если несколько детей используют одно и то же имя, вы можете указать их позицию на основе 0

     // first <title/> child echo $programme->title[0]; // create or change the value of the second <title/> child $programme->title[1] = 'Second title'; 
  4. Доступ к атрибутам, как если бы они были ключами массива

     // <mynode attr="attribute value" /> echo $mynode['attr']; 
  5. XPath всегда возвращает массив.


Вернемся к вашему делу, лучший способ получить доступ к этому узлу <title /> будет

 $programme = simplexml_load_file("local.xml"); echo "Title: " . $programme->title; 

Прежде всего, метод simplexml xpath всегда возвращает массив совпадений. Даже если есть только 1 совпадение (или даже 0, и в этом случае результат представляет собой пустой массив). Вот почему вы получаете «Массив» на выходе.

Во-вторых, если вам нужен только заголовок, вам нужно изменить свой запрос xpath:

 $result = $xml->xpath("//programme/title"); echo "Title: " . $result[0] . "</br>"; 

Вероятно, вы должны изменить xpath на //programme/title а затем на echo $result[0] или оставить xpath как есть, а echo $result[0]->title . Помните, что var_dump всегда поможет вам.

Я думаю, вы хотите:

 $result = $xml->xpath("/programme/title"); echo "Title: " . $result[0] . "</br>"; 
 $xml = simplexml_load_file("local.xml"); echo $xml->programme->title; ...... echo $xml->programme->description;