用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>

解决方案 »

  1.   

    csdn 问题怎么没人回了 现在 靠 去博客园了
      

  2.   

    前两行的#和@过滤好处理,从<node>开始:
    当找到<node>时,用变量一次性记录下 $firstNode="<node>";处理下使$firstNode="</node>";
    然后一行行处理判断当前行如果=$firstNode,
    则读到此为止...
    此是<node></node>间的内容全部取出.至于<>....</>正则处理..
      

  3.   

    $fn = 'data2.txt';
    $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        ))
      

  4.   


    老大再看一个  先谢谢啦..........这是文本文件
    #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>  返回数组。
    读到结束标记  继续下一行  读完。  能不能递归的方式呢...?
      

  5.   


    这是文本文件啊   各位
    @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>
      

  6.   

    XML 的节点 可以这样用吗?
      

  7.   

    </node>
    </node>
    </node>
    同级的可以嵌套一起啊?
      

  8.   

    $fn = 'data2.txt';
    $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                                                                )                                                        )                                                )                                        )                                )                        )                )        ))