6

ここに次の xml ドキュメントがあります: 編集: (サンプルについては以下を参照)

私はphp/SimpleXMLを使用して、それをオブジェクトに変換して読み取ります:

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

print_r を実行すると、フィールドの属性が表示されますが、許容値の属性が表示されません。生の xml の例を次に示します (value 属性が必要です)。

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

これは、print_r を実行すると次のように表示されます。

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

                                                        [1] => 
                    Invalid

                                                        [2] => 
                    Deleted

                                                        [3] => 
                    Valid/Good

                                                        [4] => 
                    Inactive

                                                    )

                                            )

属性が表示されない理由の手がかりはありますか? 前もって感謝します。

編集: いくつかの 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>
4

2 に答える 2

9

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

SimpleXML で属性にアクセスする方法は、属性名を配列キー ( $node['attribute']) のように使用することです。これは、そのキーを持つ配列がどこかにあるという意味ではなく、変装した関数呼び出しです。

SimpleXML コードを書いているときにどのノードを見ているのかを知りたい場合は、私が書いたこのsimplexml_dump()関数をチェックしてください (フィードバックを歓迎します)。

于 2012-09-15T12:30:12.970 に答える
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()メソッドを使用できます。

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

XML を使用すると、次のように出力されます。

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

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

于 2012-09-15T04:29:07.633 に答える