读xml记录 遇到的麻烦
test.xml文件格式:<aa>
<user>
<name>坏坏</name>
<des>确实是个很不错的。</des>
</user>
此处省去N个<user>......</user>片断
</aa><?php
$xml = "";
$f = fopen("test.xml", 'r');
while( $data = fread( $f, 4096 ) ) {
$xml .= $data;
}
fclose( $f );
preg_match_all( "/\<aa\>(.*?)\<\/aa\>/s", $xml, $humans );
print_r($humans);
?>问题是这样的:起初print_r($humans)打印内容一直是空的。就一直删除xml文件中的user片断,当把一个2M多的有几万条的xml文件删的只有96K(只有几百条数据)时候,print_r($humans)才能打印出结果。。。。
这是为什么呢??? :em03::em03::em03: 你的意思是在 xml文件只有 96k的时候,程序才正常运行出结果吗? 这个倒不是,我一直删除xml记录,,最后删的只有几百条记录了,才能看到那个数组里有内容。。。 $f = fopen("test.xml", 'r');
while( $data = fread( $f, 4096 ) ) {
$xml .= $data;
}
fclose( $f );
这里写得有问题,干嘛不先度文件的大小,一次取出来,这样4k,4k地取多慢啊。
估计程序没执行完吧,你用正则匹配2M的东西,这个很慢的,建议你用别的办法
把这个文件一行行地比较
先比较出<aa>后,记录一个标记,再找</aa>
或者用SimpleXML解析这个文件,这个类比较好用,解析比较快 好的,我试试 处理xml还是用类库啊,这样全文的正则效率多低啊 用SimpleXML 也可以,可是还要把xml存成utf-8的才行。
现在是ansi的。 可不可以不要用utf8的,xml文件名都是中文的,这样读进来都是乱码了
页:
[1]