PHP XMLReader не загружает некоторые узлы xml - PullRequest
2 голосов
/ 04 марта 2012

Это 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>

А это код PHP:

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

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

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

Файл XML имеет большой размер, его размер более 500 МБ, поэтому я использую XMLReader.

Спасибо!

1 Ответ

0 голосов
/ 06 марта 2012

Хорошо, я нашел это сам, проблема была с символом новой строки \ 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>
...