0

XMLは次のとおりです。

<Routes>
    <Route type="source">
        <Table>
            <Tablename>incoming</Tablename>
            <Fields>
                <Fieldsname ref="description" name="Route Name">description</Fieldsname>
                <Fieldsname name="CID Match">cidnum</Fieldsname>
                <Fieldsname name="DID Match">extension</Fieldsname>
                <Fieldsname ref="dest">destination</Fieldsname>
            </Fields>
        </Table>

    </Route>
</Routes>

次に、PHPでのインスタンス化:

$doc    = new SimpleXMLElement('routingConfig.xml', null, true);

print_r($doc->Route[0])これを示しています:

SimpleXMLElement Object
(
    [@attributes] => Array
        (
            [type] => source
        )

    [comment] => SimpleXMLElement Object
        (
        )

    [Table] => SimpleXMLElement Object
        (
            [Tablename] => incoming
            [comment] => SimpleXMLElement Object
                (
                )

            [Fields] => SimpleXMLElement Object
                (
                    [Fieldsname] => Array
                        (
                            [0] => description
                            [1] => cidnum
                            [2] => extension
                            [3] => destination
                        )

                    [comment] => Array
                        (
                            [0] => SimpleXMLElement Object
                                (
                                )

                            [1] => SimpleXMLElement Object
                                (
                                )

                        )

                )

        )

)

ルート値に@attributes配列があることに注意してください。なぜ$doc->Routes[0]->Table->Fields->Fieldsname持っていないの@attributesですか?経由attributes()で取得できることはわかっていますが、に含める方法はあり$docますか?

EDIT どうやら、配列/オブジェクトのすべてprint_r()の値を表示したり、すべての子を調べたりするわけではありません。または、要求されない限り、値を返さない可能性があります(すべてがに格納されているようです)。すると、戻りますSimpleXMLElement$docprint_r($doc->Route[0]->Table->Fields->Fieldsname[0]);

SimpleXMLElement Object
(
    [@attributes] => Array
        (
            [ref] => description
            [name] => Route Name
        )

    [0] => description
)

これは私が探しているデータを示しています。しかし、私がそうするとprint_r($doc->Route[0]->Table->Field);、データは表示されません。

4

1 に答える 1

1

このSimpleXMLElementオブジェクトは、PHPで非常に高度な機能を実行します。これは、PHPが提供する多くの「魔法の」フックを実装しているためforeach()、「ブラックボックス」のように扱われるようになっています。そのため、それを使用print_r()すると、誤解を招くような不完全な情報が得られます。オブジェクトに依存print_r()(またはvar_dump())することはできませんSimpleXMLElement

aの構造をデバッグする方法SimpleXMLElementは、必要な要素を探すことですisset($xmlnode->child)。たとえば、仕事などです。だから本当にis_array($doc->Route[0]->Table->Fields->Fieldsname)なります。

于 2012-09-07T00:46:44.783 に答える