Похоже, что есть много проблем с 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, поэтому я не хочу использовать массивы.
Прежде всего, всегда указывайте свои переменные PHP после узла, который они представляют.
// the root node is <programme/> $programme = simplexml_load_file("local.xml");
Доступ к детям (узлам), как если бы они были объектами.
echo $programme->title;
Если несколько детей используют одно и то же имя, вы можете указать их позицию на основе 0
// first <title/> child echo $programme->title[0]; // create or change the value of the second <title/> child $programme->title[1] = 'Second title';
Доступ к атрибутам, как если бы они были ключами массива
// <mynode attr="attribute value" /> echo $mynode['attr'];
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;