Подтвердить что ты не робот

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
4b9b3361

Ответ 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'] также работал у меня.