web-dev-qa-db-fra.com

PHP SimpleXML + Obtenir un attribut

Le XML que je lis ressemble à ceci:

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

Pour obtenir (par exemple) le numéro du dernier épisode, je ferais:

$ep = $xml->latestepisode[0]->number;

Cela fonctionne très bien. Mais que ferais-je pour obtenir l'ID de <show id="8511">?

J'ai essayé quelque chose comme:

$id = $xml->show;
$id = $xml->show[0];

Mais aucun n'a fonctionné.

Mettre à jour

Mon extrait de code:

$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);

Ou Je. XML:

http://services.tvrage.com/feeds/episodeinfo.php?show=The.Big.Bang.Theory
18
Oskar

Cela devrait marcher.

$id = $xml["id"];

Votre racine XML devient la racine de l'objet SimpleXML. votre code appelle une racine chid avec le nom 'show', qui n'existe pas.

Vous pouvez également utiliser ce lien pour certains tutoriels: http://php.net/manual/fr/simplexml.examples-basic.php

31
Kneel-Before-ZOD

Vous devez utiliser attributs

Je crois que cela devrait fonctionner

$id = $xml->show->attributes()->id;
12
Rawkode

Cela devrait fonctionner . Vous devez utiliser des attributs avec type

$id = (string) $xml->show->attributes()->id;
var_dump($id);

Ou ca:

$id = strip_tags($xml->show->attributes()->id);
var_dump($id);
9
Mudassar Ali Sahil

Vous devez utiliser attributes() pour obtenir les attributs.

$id = $xml->show->attributes()->id;

Vous pouvez aussi faire ceci:

$attr = $xml->show->attributes();
$id = $attr['id'];

Ou vous pouvez essayer ceci:

$id = $xml->show['id'];

En regardant l'édition à votre question (<show> est votre élément racine), essayez ceci:

$id = $xml->attributes()->id;

OR

$attr = $xml->attributes();
$id = $attr['id'];

OR

$id = $xml['id'];
7
Rocket Hazmat

essaye ça

$id = (int)$xml->show->attributes()->id;
3
user3266090

Vous devez formater votre XML correctement et la laisser soigneusement utiliser <root></root> ou <document></document> n'importe quoi .. voir la spécification XML et des exemples à 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);
0
Baba

Une fois que vous avez correctement chargé le fichier xml à l’aide de l’objet SimpleXML, vous pouvez effectuer un print_r($xml_variable) et trouver facilement les attributs auxquels vous pouvez accéder. Comme d'autres utilisateurs l'ont dit, $xml['id'] a également fonctionné pour moi.

0
aguante