PHP XMLReader未加载某些xml节点


PHP XMLReader not loading some xml nodes

这是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 "<pre>";
$reader = new XMLReader();
$reader->open('temp2.xml');
while (@$reader->read()) {
    echo $reader->getAttribute("item_nbr");
    echo "'n";
}
$reader->close();
echo "</pre>";

问题是,它只提供了一些(非常少的)节点,并且由于某种原因,它没有加载大多数节点。例如,以上面的xml文件为例,它只加载第一个节点(其item_nbr="100024"),而不是最后一个节点。

你知道为什么会这样吗?

XML文件很重,大小超过500 Mb,这就是我使用XMLReader的原因。

谢谢!

好的,我自己找到了,问题是换行符,由于它的大,它使用php fseek从xml文档中获取一些行进入了我的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>