PHP SimpleXML + Получить атрибут
XML, который я читаю, выглядит следующим образом:
<show id="8511">
<name>The Big Bang Theory</name>
<link>http://www.tvrage.com/The_Big_Bang_Theory</link>
<started>2007-09-24</started>
<country>USA</country>
<latestepisode>
<number>05x23</number>
<title>The Launch Acceleration</title>
</latestepisode>
</show>
Чтобы получить (например) номер последнего эпизода, я бы сделал:
$ep = $xml->latestepisode[0]->number;
Это работает отлично. Но что бы я сделал, чтобы получить идентификатор от <show id="8511">
?
Я пробовал что-то вроде:
$id = $xml->show;
$id = $xml->show[0];
Но никто не работал.
Обновление
Мой фрагмент кода:
$url = "http://services.tvrage.com/feeds/episodeinfo.php?show=".$showName;
$result = file_get_contents($url);
$xml = new SimpleXMLElement($result);
//still doesnt work
$id = $xml->show->attributes()->id;
$ep = $xml->latestepisode[0]->number;
echo ($id);
Ori. XML:
http://services.tvrage.com/feeds/episodeinfo.php?show=The.Big.Bang.Theory
Ответы
Ответ 1
Это должно работать.
$id = $xml["id"];
Ваш корень XML становится корнем объекта SimpleXML; ваш код вызывает chid root по имени 'show', который не существует.
Вы также можете использовать эту ссылку для некоторых обучающих программ: http://php.net/manual/en/simplexml.examples-basic.php
Ответ 2
Вам нужно использовать attributes
Я считаю, что это должно работать
$id = $xml->show->attributes()->id;
Ответ 3
Это должно сработать.
Вам нужно использовать атрибуты с типом (если используется значение sting value (string))
$id = (string) $xml->show->attributes()->id;
var_dump($id);
Или это:
$id = strip_tags($xml->show->attributes()->id);
var_dump($id);
Ответ 4
Для получения атрибутов вам нужно использовать attributes()
.
$id = $xml->show->attributes()->id;
Вы также можете сделать это:
$attr = $xml->show->attributes();
$id = $attr['id'];
Или вы можете попробовать следующее:
$id = $xml->show['id'];
Глядя на редактирование вашего вопроса (<show>
- ваш корневой элемент), попробуйте следующее:
$id = $xml->attributes()->id;
ИЛИ
$attr = $xml->attributes();
$id = $attr['id'];
ИЛИ
$id = $xml['id'];
Ответ 5
попробуйте это
$id = (int)$xml->show->attributes()->id;
Ответ 6
Вам нужно правильно отформатировать XML
и позволить ему иметь возможность использовать <root></root>
или <document></document>
что угодно.. см. спецификацию XML и примеры на http://php.net/manual/en/function.simplexml-load-string.php
$xml = '<?xml version="1.0" ?>
<root>
<show id="8511">
<name>The Big Bang Theory</name>
<link>http://www.tvrage.com/The_Big_Bang_Theory</link>
<started>2007-09-24</started>
<country>USA</country>
<latestepisode>
<number>05x23</number>
<title>The Launch Acceleration</title>
</latestepisode>
</show>
</root>';
$xml = simplexml_load_string ( $xml );
var_dump ($xml->show->attributes ()->id);
Ответ 7
После правильной загрузки xml файла с помощью SimpleXML objecto вы можете сделать print_r($xml_variable)
, и вы можете легко найти, к каким атрибутам вы можете получить доступ. Как говорили другие пользователи, $xml['id']
также работал у меня.