用fopen打开后,一行行读,#和@开头的过滤掉,当有<node>或<leaf>(标签开始时开始读)读里面的三个属性,再遇下一个标签<leaf>或</leaf>或</node>后,就把前三个作为数组拿出来,也就是把每个标签中间的读完是三个元素的数组拿出来处理,读完为止.
这样的方法怎么写呀?
#vision1.1
@fileid=0010
<node>
name=xx
id=0
orth=zzz
<leaf>
name=xx
id=801
orth=/btf/sub.txt
</leaf>
<leaf>
name=xx
id=101
orth=/bbs/test.txt
</leaf>
</node>
这样的方法怎么写呀?
#vision1.1
@fileid=0010
<node>
name=xx
id=0
orth=zzz
<leaf>
name=xx
id=801
orth=/btf/sub.txt
</leaf>
<leaf>
name=xx
id=101
orth=/bbs/test.txt
</leaf>
</node>
当找到<node>时,用变量一次性记录下 $firstNode="<node>";处理下使$firstNode="</node>";
然后一行行处理判断当前行如果=$firstNode,
则读到此为止...
此是<node></node>间的内容全部取出.至于<>....</>正则处理..
$fp = fopen($fn, 'r');$s = '';
while($buf = fgets($fp)) {
if(in_array($buf{0}, array('#', '@'))) continue;
if($buf{0} == '<') {
if($s) {
parse_str($s, $t);
$r[] = $t;
$s = '';
}
continue;
}
$s .= ($s ? '&' : '') . $buf;
}
fclose($fp);
print_r($r);Array
(
[0] => Array
(
[name] => xx [id] => 0 [orth] => zzz ) [1] => Array
(
[name] => xx [id] => 801 [orth] => /btf/sub.txt ) [2] => Array
(
[name] => xx [id] => 101 [orth] => /bbs/test.txt ))
老大再看一个 先谢谢啦..........这是文本文件
#THIS TEXT FILE.
@vi=1004
@fileid=0010
<node>
name=统计
id=0
opt=caption
<node>
name=数量
id=6000
opt=caption
<node>
name=人数
id=6001
opt=caption
<leaf>
name=用户数
id=6002
opt=caption
</leaf>
<leaf>
name=用户数
id=6002
opt=caption
</leaf> </node>
</node>
</node>这个该怎么读呢 各位
前三行不要 读到第一个<node> 就读它下一行的3个属性,放进数组 。再读到下一个<node> 返回数组。
读到结束标记 继续下一行 读完。 能不能递归的方式呢...?
这是文本文件啊 各位
@vi=1004
@fileid=0010
<node>
name=统计
id=0
opt=caption
<node>
name=数量
id=6000
opt=caption
<node>
name=人数
id=6001
opt=caption
<leaf>
name=用户数
id=6002
opt=caption
</leaf>
<leaf>
name=用户数
id=6002
opt=caption
</leaf>
</node>
</node>
</node>
</node>
</node>
同级的可以嵌套一起啊?
$fp = fopen($fn, 'r');
$r = foo($fp);
fclose($fp);
print_r($r);function foo($fp) {
$r = array();
while($buf = fgets($fp)) {
if(in_array($buf{0}, array('#', '@'))) continue;
if($buf{0} == '<') {
if($buf{1} == '/') return $r;
$r[substr(trim($buf),1, -1)][] = foo($fp);
continue;
}
parse_str($buf, $t);
$r += $t;
}
return $r;
}
Array
(
[node] => Array
(
[0] => Array
(
[name] => 统计 [id] => 0 [opt] => caption [node] => Array
(
[0] => Array
(
[name] => 数量 [id] => 6000 [opt] => caption [node] => Array
(
[0] => Array
(
[name] => 人数 [id] => 6001 [opt] => caption [leaf] => Array
(
[0] => Array
(
[name] => 用户数 [id] => 6002 [opt] => caption ) [1] => Array
(
[name] => 用户数 [id] => 6002 [opt] => caption ) ) ) ) ) ) ) ))