2

現在、次の XML 構造があります。

<root>
  <maininfo>
    <node>
      <tournament_id>3100423</tournament_id>
      <games>
        <a_0>
          <id>23523636</id>
          <type>
            <choice_4>
              <choice_id>345</choice_id>
            <choice_4>
            <choice_9>
              <choice_id>345</choice_id>
            <choice_9>
            ... etc
          </type>
        </a_0>
        <a_1></a_1>
        <a_2></a_2>
        ...etc
      </games>
    </info>
  </node>
</root>

次のようにするだけで、最初のノード要素「a_0」の ID を簡単に取得できます。

maininfo[0]->a_3130432[0]->games[0]->a_1[0]->id;

私の問題は次のとおりです:a_0すべての ,a_1を (foreach で) 自動的に反復処理しa_2、これらのノード要素のそれぞれの値と、"345" のようなすべての子の値を取得するにはどうすればよい<choice_id>345</choice_id>ですか?

の終了番号+ の子a_0、は動的に作成され、次の要素ごとに +1 でカウントアップする _[番号] にはロジックがありません。a_1choice_4choice_9

4

3 に答える 3

0

SimpleXML を使用すると、これを非常に簡単に行うことができます。

<?php
$xmlStr = "<?xml version='1.0' standalone='yes'?>
<root>
  <maininfo>
    <node>
      <tournament_id>3100423</tournament_id>
      <games>
    <a_0>
      <id>23523636</id>
      <type>
        <choice_4>
          <choice_id>345</choice_id>
        </choice_4>
        <choice_9>
          <choice_id>345</choice_id>
        </choice_9>
      </type>
    </a_0>
    <a_1></a_1>
    <a_2></a_2>
      </games>
  </node>
  </maininfo>
</root>";

$xmlRoot = new SimpleXMLElement($xmlStr);
$i = 0;
foreach($xmlRoot->maininfo[0]->node[0]->games[0] as $a_x)
{
    echo $i++ . " - " . htmlentities($a_x->asXML()) . "<br/>";
}
?>

XML 文字列の一部を修正して、構文的に正しいものにしました。結果はhttp://phpfiddle.org/main/code/56q-sanで確認できます

于 2013-07-21T19:48:48.363 に答える