Iterparse截断XML元素

时间:2014-08-27 04:12:25

标签: python xml iterparse

我有一个大的XML文件(大约600 MB),我试图使用带有iterparse的cElementTree解析。第一次尝试这个。

我正在迭代&#39;产品&#39;我处理每个产品后的标签和elem.clear()。在我的解析中,我有一个函数parse_trips,它使用for循环来解析<trip>个标签内的<trips>个标签(每个产品可能有数百个,每个数百行长)。

for trip in trips:
    dump(trip)
    get_date(trip, product)
    set_price(trip, product)

然而,当我dump(trips)时,我发现这些标签会在没有任何错误的情况下被提前截断/关闭。解析器似乎在内存中达到elem的最大长度,然后就不再保持了。

原始xml:

<trip>
    <code>text</code>
    <name>text</name>
    <image>img.jpg</image>
    <date>2014-08-10</date>
    <pricing>

    </pricing>
    <itinerary>
        <code>1</code>
        <events>
            <event>
                eventInfo 1
            </event>
            <event>
                eventInfo 2
            </event>
            <event>
                eventInfo 3
            </event>
            <event>
                eventInfo 4
            </event>
            <event>
                eventInfo 5
            </event>
            <event>
                eventInfo 6
            </event>
            <event>
                eventInfo 7
            </event>
            <event>
                eventInfo 8
            </event>
        </events>
    </itinerary>
</trip>

我得到的输出是可能有6个这样的组,当我到达组中的第二次旅行时,dump(trip)看起来像这样:

<trip>
    <code>text</code>
    <name>text</name>
    <image>img.jpg</image>
    <date>2014-08-10</date>
    <pricing></pricing>
    <itinerary>
        <code>1</code>
        <events>
            <event>
                eventInfo 1
            </event>
            <event>
                eventInfo 2
            </event>
            <event>
                eventInfo 3
            </event>
        </events>            
    </itinerary>
</trip>

以后的每一次旅行都消失了。我尝试循环,只是递增一个整数i来计算有多少<trip>个标签,它只到达第二个它截断然后结束for循环。

有没有办法查看/配置iterparse可以抓取的元素的大小?或者一旦我去旅行以获取iter的所有子节点,再次使用<trips>

0 个答案:

没有答案