• 締切済み

PHPでXMLを扱いたいのですが

PHPでXMLを扱いたいのですが、わからないところがあります。 <XML>  <T>   <A>    <a>    </a>    <b>    </b>    <c>     <c1></c1>     <c2></c2>    </c>   </A>   <A>    <a>    </a>    <b>    </b>    <c>     <c1></c1>     <c2></c2>    </c>   </A>   <A> 以下くりかし・・・  </T> </XML> このような感じのXMLがある時に、<a>,<b>等のタグの中身はちゃんと一つめの<A>、二つめの<A>、のように、 繰り返しある全てを取り出すことが来るのですが、 <c1>のようにもう一つ奥になっているものが取り出せません。 //以下成功するソースです。 foreach(XML->T->A as $value){ $data[]=$value->a; } for($i=0,$n=count($data);$i<$n;$i++){ $file=$data[$i]; } echo $file; これだとうまく動作しますが、 //以下失敗するソースです。 foreach(XML->T->A->c as $value){ $data[]=$value->c1; } for($i=0,$n=count($data);$i<$n;$i++){ $file=$data[$i]; } echo $file; このように<c1>を取り出そうとすると、繰り返しある<c1>の内の初めの一つしか取りだせません。 もう何回も色々と変えてやっているのですが、どれもうまくいきませんでした。 どうすればいいのでしょうか。分かる方教えて下さい、お願いします。

みんなの回答

  • LancerVII
  • ベストアンサー率51% (1060/2054)
回答No.2

こんにちは。 >同じやり方でも上の<a>の場合では複数出来るのに、何故下の<c1>の場合では出来ないのでしょうか? foreach ( XML->T->A as $value ) { } <T>のなかにある<A>の個数ですのでサンプルxmlの繰り返しを考慮しないと2回。 foreach(XML->T->A->c as $value){ $data[]=$value->c1; } <T>の<A>の中に<c>は1個ですので1回。 XML-T-A分繰り返せばc1が全て取得できます。 下記サンプルを参考にしてください。 http://hppg.moe.hm/okwave/qa/q7291097/

回答No.1

こんばんは。 えーと・・・、これはホントのソース??? >for($i=0,$n=count($data);$i<$n;$i++){ >$file=$data[$i]; >} >echo $file; まぁ、普通に考えて、$fileが上書きされてるので・・・。 >繰り返しある<c1>の内の初めの一つしか取りだせません。 正確には2番目だけしか出ないです・・・はい。

syarol
質問者

補足

すみません、プログラミング初心者な者で・・・。 書き間違えました、正しくはこうでした。 for($i=0,$n=count($data);$i<$n;$i++){ $file=$data[$i]; echo $file; } 恐らくこれでも間違えていると思うのですが、 同じやり方でも上の<a>の場合では複数出来るのに、何故下の<c1>の場合では出来ないのでしょうか?

関連するQ&A