1

OK、次の形式の基本的な XML があります。

<application>
   <authentication>
      <id>26</id>
      <key>gabe</key>
   </authentication>
   <home>
      <address>443 Pacific Avenue</address>
      <city>North Las Vegas</city>
      <state>NV</state>
      <zip>89084</zip>
   </home>
</application>

次のように、simplexml_load_string() を使用して上記の XML を変数にロードしています。

$xml = simplexml_load_string($xml_string);

2 番目のノードの名前と値のペアを抽出したいと考えています。たとえば、ノード<authentication><home>ノードを無視したいと考えています。これらの第 1 レベル ノード内の子ノードにのみ関心があります。

  1. ID
  2. 住所
  3. ジップ

したがって、上記の 6 つの名前と値のペアを抽出するが、「下位レベル」の名前と値のペアを無視する foreach ループを探しています。<authentication>以下のコードは、ノードとノードの名前と値のペアのみを出力します<home>(無視したい)。

foreach($xml->children() as $value) {
  $name = chop($value->getName());
  print "$name = $value";
}

上記の 6 つのノードの名前と値のペアのみを抽出するコードを手伝ってくれる人はいますか?

4

2 に答える 2

0

OK、それで私はあなたの提案(Oliver A.)をレビューし、次のコードを思いついた:

$string = <<<XML
<application>
   <authentication>
      <id>26</id>
      <key>gabe</key>
   </authentication>
   <home>
      <address>443 Pacific Avenue</address>
      <city>North Las Vegas</city>
      <state>NV</state>
      <zip>89084</zip>
   </home>
</application>
XML;

$xml = new SimpleXMLElement($string);

/* Search for <a><b><c> */
$result = $xml->xpath('/application/*/*');

while(list( , $node) = each($result)) {
    echo '/application/*/*: ',$node,"\n";
}

これは次を返します:

/application/*/*: 26
/application/*/*: gabe
/application/*/*: 443 Pacific Avenue
/application/*/*: North Las Vegas
/application/*/*: NV
/application/*/*: 89084

私は今、第2レベルの要素の値しか持っていないので、これは進歩です。素晴らしい!問題は、名前と値のペアに変数名を割り当てる必要があることです。各第2レベルノードの名前を抽出できないようです。私は何かが足りないのですか?

于 2012-08-10T11:20:48.600 に答える
0

xpath を使用できます: http://php.net/manual/en/simplexmlelement.xpath.php

パスで

/application/*/*

すべての第 2 レベルの要素を取得します。

編集:

$string = <<<XML
<application>
   <authentication>
      <id>26</id>
      <key>gabe</key>
   </authentication>
       <home>
          <address>443 Pacific Avenue</address>
          <city>North Las Vegas</city>
          <state>NV</state>
          <zip>89084</zip>
       </home>
    </application>
XML;

    $xml = new SimpleXMLElement($string);

   foreach($xml->xpath('/application/*/*') as $node){
        echo "{$node->getName()}: $node,\n";
   }
于 2012-08-10T06:46:05.500 に答える