2012-05-10 4 views
18

XMLを取得します私はこのようなルックスを読んでいます:PHPのSimpleXML +属性

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

この作品をちょうど良い。しかし、IDを<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); 

博多織。 XML:

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

http://php.net/を試してみてくださいsimplexml.examples-basic – hakre

+0

[SimpleXMLから@attributeへアクセスする](http://stackoverflow.com/questions/1652128/accessing-attribute-from-simplexml) - 参照用。 – hakre

+0

参照: http://stackoverflow.com/questions/10537657/php-simplexml-get-attribute/19289857#19289857 –

答えて

31

これは動作するはずです。

$id = $xml["id"]; 

XMLルートがSimpleXMLオブジェクトのルートになります。あなたのコードは存在しない 'show'の名前でchidルートを呼び出しています。

また、いくつかのチュートリアルのために、このリンクを使用することができます。http://php.net/manual/en/simplexml.examples-basic.php

+2

これはトリックを行うようだ!どうもありがとう! (私はおそらく、次回の例を見るのにもっと時間を取るべきです:() – Andrej

12

あなたは私は、これはあなたが属性を取得するためにattributes()を使用する必要が

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

これはうまくいかないでしょう... 'show'はデフォルトのルートです...彼はワープする必要があります'xml'は正しくありません – Baba

+0

残念ながら私は'警告:main()[function.main]:ノードはもはや存在しません.... ' – Andrej

7

を動作するはずと信じてattributes

を使用する必要があります。

あなたもこれを行うことができます
$id = $xml->show->attributes()->id; 

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

それとも、この試すことができます:あなたの質問に編集を見てみると

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

を(<show>は、あなたのルート要素である)、これを試してください:

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

OR

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

OR

$id = $xml['id']; 
+0

残念ながら第1と第2の例は' Warning:main()[function.main ]:ノードはもはや存在しません。 '、最後のものは何も表示しません。 – Andrej

+0

@Andrej:私の編集をチェックしてください。 –

+0

正しい答えを変更して今すぐあなたを選ぶよりも@サムの答えを編集した場合は、私に知らせてください。 – Andrej

0

あなたは正しくXMLをフォーマットし、それを持っているようにする必要がありexamply <root></root>または<document></document>ものを使用して...あなたが正しくあなたがprint_r($xml_variable)を行うことができますし、簡単にあなたがアクセスできる属性を見つけることができobjectoのSimpleXMLを使用して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); 
+0

残念ながら、私はXMLがどのようにフォーマットされているかに影響していません! – Andrej

+0

私は自分の投稿にオリジナルのXMLソースを追加しました! – Andrej

0

でXMLの仕様と例を参照してください。他のユーザーは$xml['id']も私のために働いていると言っています。

8

これは動作するはずです。 (値の使用(文字列)を刺す場合)あなたは

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

またはこのタイプの属性を使用する必要が :

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

この

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