1

私はこのXMLを持っています:

<?xml version="1.0" encoding="UTF-8"?>
<data>
    <header>
        <export_time>2012-08-28 08:13:36</export_time>
        <file_name>nameasd</file_name>
    </header>
    <shipping>
            <shipping_number>some data</shipping_number>
            <location_id>some data</location_id>
            <status>DONE</status>
                <shipping_line>
                    <article id="1257" />
                    <article id="1177" >
                        <product>5500070000126273</product>
                        <product>5500070000126264</product>
                        <product>5500070000126255</product>
                        <product>5500070000126246</product>
                        <product>5500070000126237</product>
                    </article>
                </shipping_line>
    </shipping>
</data>

Ii は次のようにデータにアクセスできます。

$shipping_number_array = $xml->xpath('/data/shipping/shipping_number');
$location_id_array = $xml->xpath('/data/shipping/location_id');
$shipping_status_array = $xml->xpath('/data/shipping/status');
$shipping_number = $shipping_number_array[0];
$location_id = $location_id_array[0];
$status = $shipping_status_array[0];

ここで、article要素に子があるかどうかを確認し、ある場合はそれらを配列に入れたいと思います。

これは機能していないようです。エラーが発生します:非オブジェクトでメンバー関数 hasChildren() を呼び出します。

            if ($article_array->hasChildren()) {
                error_log('has children');
            }
4

1 に答える 1

1

次のように、xpath のchild::ロケーション パスを使用して記事ノードの子を選択し、記事ノードの 1 つをバックアップできます。

$article_array = $xml->xpath('//article/child::*/..');

これは、子を持つ記事ノードのみを返す必要があります(例ではID 1177)。

于 2012-09-05T13:26:58.047 に答える