0

データベースを更新するために解析しているxmlファイルは約150MBであるため、PHPでsaxを使用しています。

sax を使用している xml オブジェクトの場所を特定する方法がわかりません。たとえば、xml は次のようになります。

<listing>
    <home>
        <address>123 main st.</address>
    </home>
    <brokerage>
        <address>555 N. high st.</address>
    </brokerage>
</listing>

sax を使用すると、リスト タグの開始時刻、ホーム タグ、住所タグなどがわかりますが、xml_set_character_data_handler で設定した関数に制御が渡され、住所を取得できます。

私の問題は、自宅 -> 住所または証券会社 -> 住所のどちらを読んでいるのかを知ることです。

この xml ファイルには、同じタグ名を共有する複数のフィールドがあり、異なる親タグ (listingAgent、propertyContact などの下の子として firstName、lastName、phone、email など) の下で複数回使用されます。

私はグーグルで調べてきましたが、私が見つけた唯一のsaxの例は、xmlファイルのデータに基づいて決定を下す方法ではなく、データをエコーする方法を示しています。私が認識していない関数がありますか、または子がどの親要素に属するかを判断するために独自の関数を作成する必要がありますか?

4

1 に答える 1

1

開いているタグ (疑似コード) のリストを格納する単純なスタックを使用して、XML ドキュメント内の位置を確認できます。

$openedTags = array();

while ($node = /* read next XML node*/) {
    if ($node->isOpeningTag()) {
        array_push($openedTags, $node->getTagName());
        continue;
    }

    if ($node->isClosingTag()) {
        array_pop($openedTags);
        continue;
    }

    if ($node->isTextNode()) {
        print_r($openedTags);       // root ... listing, home, address
        echo $node->getTextValue(); // 123 main st.
    }
}
于 2012-09-20T08:53:30.787 に答える