0

私はこれを持っています

$xml = new SimpleXMLElement($output);
$names = $xml->param->value->array->data;

ここに出力があります

SimpleXMLElement Object
(
[value] => Array
    (
        [0] => SimpleXMLElement Object
            (
                [struct] => SimpleXMLElement Object
                    (
                        [member] => SimpleXMLElement Object
                            (
                                [name] => school
                                [value] => SimpleXMLElement Object
                                    (
                                        [struct] => SimpleXMLElement Object
                                            (
                                                [member] => Array
                                                    (
                                                        [0] => SimpleXMLElement Object
                                                            (
                                                                [name] => schoolid
                                                                [value] => SimpleXMLElement Object
                                                                    (
                                                                        [string] => 49961
                                                                    )

                                                            )

                                                        [1] => SimpleXMLElement Object
                                                            (
                                                                [name] => schoolname
                                                                [value] => SimpleXMLElement Object
                                                                    (
                                                                        [string] => Millersville Elementary School
                                                                    )

                                                            )

「学校名」の値に到達しようとしています

使用して

for($i=0;$i<count($names);$i++) {
    echo $names[0][$i]->struct->member->value->struct->member[0]->value.'<br>';
}

as string($names[0]etc.) も試しましたが成功しませんでした。最初に $names[0][$i]?? で順序を間違えていると思います。

どんな助けでも大歓迎です!

4

4 に答える 4

6

怠けていると感じたら、XPath の学習を検討してください。終わりのない -> の連続で問題を解きたくない場合は、問題に対処する簡単な方法です:)

XPath を学ぶことも投資です。XML を扱うときは、それを知る必要があります。これは XML または DOM の SQL です( DOMXPathを参照)。

これは実際には答えではないことはわかっていますが、時間をかけてここで指摘したことは価値があり、問題も解決します.

于 2012-10-23T18:47:48.030 に答える
1

フィールド名と値を取得するためにxpathを使用するソリューションは次のとおりです

$cols = $xml->xpath('//member/value/struct/member/name');
$names = $xml->xpath('//member/value/struct/member/value/*');
for($i=0;$i<count($cols);$i++) {
echo $cols[$i].' = '.$names[$i].'<br>';
}

xpath は xml を扱う人にとって必須です!

于 2012-10-23T20:10:11.597 に答える
0

結果の$nameは、valuse(オブジェクトと配列)の組み合わせです。

$nameをオブジェクトのみまたは配列のみに変換してみてください。

あなたが投稿した例は完全ではありません、それを追いかけることを試みることができませんでした。

于 2012-10-23T18:53:46.623 に答える
0

最近同様の問題が発生し、構造全体を配列内の配列に平坦化して、はるかに移動しやすくするものを作成することになりましたが、当面の問題として、各ステージでvar_dump/print_rを実行してレベルを上げると役立つことがよくあります。レベル別。

$ namesはオブジェクトであるため、必要な参照は次のようになります。

$names->value[0]->struct->member->value->struct->member['value'][1]->value;

編集:count()を再評価する必要があると思うので、今のところループ部分を無視しました。count($ names-> value)である必要があるようです。これは、学校の配列です。正解です。この場合、$iは最初のになり[0]ます。

于 2012-10-23T18:56:51.787 に答える