0

以下の構造を持つ simplexml オブジェクトでこれらの要素にアクセスしようとしています。

この xml ブロッ​​クの値を取得するのに非常に苦労しています。

<result name="doclist" numFound="9" start="0">
    <doc>
        <str name="merchant_name_url_title">accuscore</str>
        <str name="end_date_time"/>
        <str name="category">betting & gaming</str>
        <str name="merchant_name">Accuscore</str>
        <str name="link_type">Text Link</str>
    </doc>
</result>

「numFound」の値と各レコードのすべての「doc/str」データを取得しようとしています。

以下は、完全な構造です。2 つの "doc" 要素を表示しているだけですが、何千もある可能性があります。

<response>
    <lst name="responseHeader">
        <int name="status">0</int>
        <int name="QTime">5</int>
        <lst name="params">
            <str name="indent">true</str>
            <str name="start">0</str>
            <str name="q">*:*</str>
            <str name="rows">2</str>
        </lst>
    </lst>
    <lst name="grouped">
        <lst name="merchant_name">
            <int name="matches">5143</int>
            <arr name="groups">
                <lst>
                    <str name="groupValue">accuscor</str>
                    <result name="doclist" numFound="9" start="0">
                        <doc>
                            <str name="merchant_name_url_title">accuscore</str>
                            <str name="end_date_time"/>
                            <str name="category">betting & gaming</str>
                            <str name="merchant_name">Accuscore</str>
                            <str name="link_type">Text Link</str>
                        </doc>
                    </result>
                </lst>
                <lst>
                    <str name="groupValue">acdse</str>
                    <result name="doclist" numFound="3" start="0">
                        <doc>
                            <str name="merchant_name_url_title">acdsee</str>
                            <str name="end_date_time"/>
                            <str name="category">computer hardware & software</str>
                            <str name="merchant_name">ACDSee</str>
                            <str name="link_type">Text Link</str>
                        </doc>
                    </result>
                </lst>
            </arr>
        </lst>
    </lst>

何時間も頭を壁にぶつけていたので、ここで助けを求めることにしました!

どんな助けやヒントも大歓迎です。

前もって感謝します !

4

1 に答える 1

0

貼り付けた XML は無効です。単に を見逃したから</response>ではなく、エスケープ&されていない記号が含まれているためです。これは である必要があります&amp;

strまた、要素名 ( 、arrlstなど) はデータの型だけを定義しているように見えるため、明らかに XML を理解していない人によって書かれたとも言えます。

ただし、これを修正して という SimpleXML オブジェクトにロードすると$sx、XPath 式を使用してすべてのresult要素を検索し、そこから先に進むことができます。

foreach ( $sx->xpath('//lst[@name="grouped"]//result') as $result )
{
        echo 'Begin Result; numFound: ' . (string)$result['numFound'] . PHP_EOL;
        foreach ( $result->doc as $doc )
        {
                echo 'Begin doc:' . PHP_EOL;
                foreach ( $doc->str as $str )
                {
                        echo (string)$str['name'] . ': ' . (string)$str . PHP_EOL;
                }
                echo 'End doc' . PHP_EOL . PHP_EOL;
        }
        echo 'End result' . PHP_EOL . PHP_EOL;
}
于 2012-08-23T20:23:42.633 に答える