2012-09-14 14 views
5

が欠落している私はここで、次のXML文書を持っている: 編集:(サンプルは下記を参照)PHPのSimpleXMLの属性が

を私はそれを読むためにオブジェクトに転化するPHP/SimpleXMLをを使用しています:

$xmlContent = file_get_contents($path . '/test.xml'); 
$tablesRaw = new SimpleXMLElement($xmlContent); 
echo '<pre>'; 
print_r($tablesRaw); 
echo '</pre>'; 

私はprint_rのときにフィールドの属性を表示しますが、acceptable-valueの属性は表示されません。ここでは(私はvalue属性を必要とする)生のXMLの例です。

[acceptable-values] => SimpleXMLElement Object 
              (
               [acceptable-value] => Array 
                (
                 [0] => 
        Unknown 

                 [1] => 
        Invalid 

                 [2] => 
        Deleted 

                 [3] => 
        Valid/Good 

                 [4] => 
        Inactive 

                ) 

              ) 

属性が表示されない理由をどれ手がかり:

<acceptable-value value="0"> 
    Unknown 
</acceptable-value> 

これは私がしますprint_rとき、私が見るものでしょうか?前もって感謝します。

EDIT:XMLのいくつかのための要求:

<field name="Address1Type" type="String"/> 
<field name="Address2Street1" type="String"/> 
<field name="Address2Street2" type="String"/> 
<field name="Address2Type" type="String"/> 
<field name="Address3Street1" type="String"/> 
<field name="Status" type="Integer" access="R"> 
      <acceptable-values> 
       <acceptable-value value="0"> 
        Unknown 
       </acceptable-value> 
       <acceptable-value value="1"> 
        Invalid 
       </acceptable-value> 
       <acceptable-value value="2"> 
        Deleted 
       </acceptable-value> 
       <acceptable-value value="3"> 
        Valid/Good 
       </acceptable-value> 
       <acceptable-value value="4"> 
        Inactive 
       </acceptable-value> 
      </acceptable-values> 
     </field> 
+0

オリジナルのXMLコードをコピーして貼り付けてもらうので、ダウンロードする必要はありませんか? – Norse

+0

ええ、 – joshmmo

+1

を表示するためにいくつかを取得しようとしています。ここに表示されます。 – joshmmo

答えて

7

ここで簡単な答えは、SimpleXMLオブジェクトでprint_r()を使用しないことです。 PHP以外のデータのラッパーであるため、通常「全体」オブジェクトを表示するような関数は、あなたが見ているものを実際に反映しません。

SimpleXMLで属性にアクセスするには、属性名を配列キー($node['attribute'])のように使用します。これはではありません。は、そのキーのどこかに配列があることを意味します。それは、偽装された関数呼び出しです。

SimpleXMLコードの作成中にどのノードを見ているかを知りたい場合は、私が書いた(フィードバック歓迎)をチェックしてください。

+0

私は何か間違っているのかどうかわかりませんが、それは私のために働いていないように見えます、あなたは私のコード/出力を見ることができますhttp://i46.tinypic.com/wnqti.jpg – joshmmo

+0

@joshmmo謝罪、私が喜んでいることについて彼らが頻繁に不平を言うので、Noticesが抑制されたPHP。私は私のdevのボックスに次にログオンするときにその通知を発生させない関数を更新します。しかし、出力は期待どおりです。構造全体を再帰的に試みるのではなく、現在のノードが 'テーブル'と呼ばれ、 'テーブル'という57の子を含んでいると伝えます。'simplexml_dump($ tablesRaw-> children())'は、もっと便利なもの、あるいは 'simplexml_dump($ tablesRaw-> table [22] - > fields-> field [31] - > {'acceptable-values'} - >子供()) ' – IMSoP

+0

私はそれが好きです。それは私が一度にすべてを見ることができるように話すようにオブジェクト全体を拡大することができればいいと思う。 – joshmmo

0

まず、あなたはSimpleXMLElementオブジェクトを取得する必要があります。この場合:今

$xmlContent = file_get_contents($path . '/test.xml'); 
$tablesRaw = new SimpleXMLElement($xmlContent); 
$elements = $tablesRaw->table[22]->fields->field[31]->{'acceptable-values'}->children(); 

、あなたは各acceptable-valueオブジェクトを反復処理し、attributes()方法を使用することができます:あなたのXMLで

foreach($elements as $element) { 
    echo $element->attributes()->value . " "; 
    echo trim($element[0]) . "\n"; 
} 

、印刷します:

0 Unknown 
1 Invalid 
2 Deleted 
3 Valid/Good 
4 Inactive 

それはdoesnのをattributes()への呼び出しは要素の実際の属性を取得するため、配列インデックスに依存しません。 ->valueは、名前が「値」の属性を取得します。

関連する問題