jsf008 发表于 2011-03-27 15:54

读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)才能打印出结果。。。。

这是为什么呢???

jsf008 发表于 2011-03-27 15:56

:em03::em03::em03:

a.a 发表于 2011-03-27 16:11

你的意思是在 xml文件只有 96k的时候,程序才正常运行出结果吗?

jsf008 发表于 2011-03-27 16:49

这个倒不是,我一直删除xml记录,,最后删的只有几百条记录了,才能看到那个数组里有内容。。。

yifangyou 发表于 2011-03-27 17:39

$f = fopen("test.xml", 'r');
while( $data = fread( $f, 4096 ) ) {
$xml .= $data;
}
fclose( $f );

这里写得有问题,干嘛不先度文件的大小,一次取出来,这样4k,4k地取多慢啊。
估计程序没执行完吧,你用正则匹配2M的东西,这个很慢的,建议你用别的办法
把这个文件一行行地比较
先比较出<aa>后,记录一个标记,再找</aa>

或者用SimpleXML解析这个文件,这个类比较好用,解析比较快

jsf008 发表于 2011-03-27 19:36

好的,我试试

ws00377531 发表于 2011-03-27 20:27

处理xml还是用类库啊,这样全文的正则效率多低啊

jsf008 发表于 2011-03-28 08:24

用SimpleXML 也可以,可是还要把xml存成utf-8的才行。
现在是ansi的。

jsf008 发表于 2011-03-28 08:32

可不可以不要用utf8的,xml文件名都是中文的,这样读进来都是乱码了
页: [1]
查看完整版本: 读xml记录 遇到的麻烦