一回も披露したことのない豆知識

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>の内の初めの一つしか取りだせません。
もう何回も色々と変えてやっているのですが、どれもうまくいきませんでした。
どうすればいいのでしょうか。分かる方教えて下さい、お願いします。

A 回答 (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/
    • good
    • 0

こんばんは。



えーと・・・、これはホントのソース???

>for($i=0,$n=count($data);$i<$n;$i++){
>$file=$data[$i];
>}
>echo $file;

まぁ、普通に考えて、$fileが上書きされてるので・・・。

>繰り返しある<c1>の内の初めの一つしか取りだせません。
正確には2番目だけしか出ないです・・・はい。

この回答への補足

すみません、プログラミング初心者な者で・・・。
書き間違えました、正しくはこうでした。
for($i=0,$n=count($data);$i<$n;$i++){
$file=$data[$i];
echo $file;
}

恐らくこれでも間違えていると思うのですが、
同じやり方でも上の<a>の場合では複数出来るのに、何故下の<c1>の場合では出来ないのでしょうか?

補足日時:2012/02/08 01:19
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!