PHP XMLReader не загружает некоторые узлы xml

Это xml:

<Root xmlns:sql='urn:schemas-microsoft-com:xml-sql'>
<Truserv>

    <Item item_nbr="100024" srp_cost="11.99" member_cost="4.90" ds_cost="4.08" short_description="36&quot; Bent SB Axe Handle" vendor_id="74658" dpt_code="L " class_code="14" subclass_code="36" vendor_name="LINK HANDLE DIV OF SEYMOUR" upc="25545100091" long_description="36&quot;, Homeowner Bent Single Bit Axe Handle, For 3 To 5 LB Axes, Good Weight Hickory, Natural Wax Finish, 1 Wood Wedge Included, Hang Up Hook In Handle For Pegboard Display." weight="1.50" length="0.27" width="0.60" height="3.13" pack_weight="18.60" pack_length="3.20" pack_width="7.20" pack_height="37.50" retail_pack_qty="1" member_pack_qty="12" member_pack_type="B" member_break_pack="Y" model="100-09" item_picture_id="100024" country_code="US" to_be_discontinued="N" retail_uom="EA " Edit_Divisor="1" Exclusive_Brand_Code=""/>

    <Item item_nbr="100183" srp_cost="16.99" member_cost="10.61" ds_cost="10.64" short_de
scription="Lav Pop Up Assembly" vendor_id="5967" dpt_code="A " class_code="38" subclass_code="11" vendor_name="UNITED STATES HDW MFG/U S HA" upc="16356025802" long_description="1-1/4&quot;, Chrome Finish, Lavatory Pop Up Assembly, With Push Rod, No Overflow, ABS Plastic Top &amp; Body." weight="0.54" length="2.31" width="3.75" height="15.38" pack_weight="17.50" pack_length="21.75" pack_width="8.73" pack_height="17.13" retail_pack_qty="1" member_pack_qty="24" member_pack_type="B" member_break_pack="Y" model="P139C" item_picture_id="100183" country_code="US" to_be_discontinued="N" retail_uom="EA " Edit_Divisor="1" Exclusive_Brand_Code=""/>

</Truserv>

And this is the PHP Code:

echo "<pre>";
$reader = new XMLReader();
$reader->open('temp2.xml');
while (@$reader->read()) {
    echo $reader->getAttribute("item_nbr");
    echo "\n";
}
$reader->close();
echo "</pre>";

Проблема в том, что он дает только некоторые (очень немногие) узлы и по какой-то причине не загружает большинство узлов. Например, возьмите приведенный выше XML-файл, он загружает только 1-й узел (у которого item_nbr="100024"), а не последний.

Есть идеи, почему это происходит?

XML-файл тяжелый, его размер превышает 500 МБ, поэтому я использую XMLReader.

Спасибо!


person Aamir Siddique    schedule 04.03.2012    source источник
comment
либо добавьте решение в качестве ответа и примите его, либо вообще удалите вопрос, пожалуйста. Спасибо.   -  person Gordon    schedule 04.03.2012
comment
@gordon, я пытался, но он говорит, что нужно подождать 8 часов. Я исправлю это через 8 часов.   -  person Aamir Siddique    schedule 04.03.2012


Ответы (1)


Хорошо, я нашел это сам, проблема была с символом новой строки \n, который попал в мой xml-файл с помощью php fseek для извлечения некоторых строк из xml-документа из-за его большого размера. И в результате я получил данные вместе с символами новой строки, которые не позволяли парсеру xmlreader анализировать дальше.

теперь правильный xml-файл:

<Root xmlns:sql='urn:schemas-microsoft-com:xml-sql'>
<Truserv>

    <Item item_nbr="100024" srp_cost="11.99" member_cost="4.90" ds_cost="4.08" short_description="36&quot; Bent SB Axe Handle" vendor_id="74658" dpt_code="L " class_code="14" subclass_code="36" vendor_name="LINK HANDLE DIV OF SEYMOUR" upc="25545100091" long_description="36&quot;, Homeowner Bent Single Bit Axe Handle, For 3 To 5 LB Axes, Good Weight Hickory, Natural Wax Finish, 1 Wood Wedge Included, Hang Up Hook In Handle For Pegboard Display." weight="1.50" length="0.27" width="0.60" height="3.13" pack_weight="18.60" pack_length="3.20" pack_width="7.20" pack_height="37.50" retail_pack_qty="1" member_pack_qty="12" member_pack_type="B" member_break_pack="Y" model="100-09" item_picture_id="100024" country_code="US" to_be_discontinued="N" retail_uom="EA " Edit_Divisor="1" Exclusive_Brand_Code=""/>

    <Item item_nbr="100183" srp_cost="16.99" member_cost="10.61" ds_cost="10.64" short_description="Lav Pop Up Assembly" vendor_id="5967" dpt_code="A " class_code="38" subclass_code="11" vendor_name="UNITED STATES HDW MFG/U S HA" upc="16356025802" long_description="1-1/4&quot;, Chrome Finish, Lavatory Pop Up Assembly, With Push Rod, No Overflow, ABS Plastic Top &amp; Body." weight="0.54" length="2.31" width="3.75" height="15.38" pack_weight="17.50" pack_length="21.75" pack_width="8.73" pack_height="17.13" retail_pack_qty="1" member_pack_qty="24" member_pack_type="B" member_break_pack="Y" model="P139C" item_picture_id="100183" country_code="US" to_be_discontinued="N" retail_uom="EA " Edit_Divisor="1" Exclusive_Brand_Code=""/>

</Truserv>
person Aamir Siddique    schedule 06.03.2012