一个文本文件内有如下内容:<KK>
<TITLE>这是一个标题</TITLE>
<BODY>这是内容啊</BODY>
<OTHER>这是其他东东</OTHER>
</KK><KK>
<TITLE>这是一个标题2</TITLE>
<BODY>这是内容啊2</BODY>
<OTHER>这是其他东东2</OTHER>
</KK><KK>
<TITLE>这是一个标题3</TITLE>
<BODY>这是内容啊3</BODY>
<OTHER>这是其他东东3</OTHER>
</KK>我现在要做的是将第一段KK之间的内容(title,body,other的内容分别插入到数据库相关字段)插入到数据库,然后再将第二段的KK之间的内容插入到数据库,循环下去,好几千个吧。用正则可以读到一个数组里面吧?如何写?数组大了是否会影响速度?是否还有其他高效的方法呢?

解决方案 »

  1.   

    用文件读写的方式,可能更效一些.
    fopen fgets
    然后就是字符串操作了.
      

  2.   

    fopen fgets 我实现过。这样的代码可否直接另存为xml文件,然后用php操作xml。不知道是否可行
      

  3.   


    ..
     当我没说,我以为是 xml 文件 
      

  4.   

    这个问题不适合,也不应该用正则来处理
    php已经提供了强大的xml处理函数,为什么不用呢?$xml = <<< XML
    <KK>
    <TITLE>这是一个标题</TITLE>
    <BODY>这是内容啊</BODY>
    <OTHER>这是其他东东</OTHER>
    </KK><KK>
    <TITLE>这是一个标题2</TITLE>
    <BODY>这是内容啊2</BODY>
    <OTHER>这是其他东东2</OTHER>
    </KK><KK>
    <TITLE>这是一个标题3</TITLE>
    <BODY>这是内容啊3</BODY>
    <OTHER>这是其他东东3</OTHER>
    </KK>
    XML;
    $p = simplexml_load_string(iconv('gbk','utf-8','<root>'.$xml.'</root>'));
    print_r($p);SimpleXMLElement Object
    (
        [KK] => Array
            (
                [0] => SimpleXMLElement Object
                    (
                        [TITLE] => 这是一个标题
                        [BODY] => 这是内容啊
                        [OTHER] => 这是其他东东
                    )            [1] => SimpleXMLElement Object
                    (
                        [TITLE] => 这是一个标题2
                        [BODY] => 这是内容啊2
                        [OTHER] => 这是其他东东2
                    )            [2] => SimpleXMLElement Object
                    (
                        [TITLE] => 这是一个标题3
                        [BODY] => 这是内容啊3
                        [OTHER] => 这是其他东东3
                    )        ))
      

  5.   

    当然,也不是不可以用正则来完成
    $xml = <<< XML
    <KK>
    <TITLE>这是一个标题</TITLE>
    <BODY>这是内容啊</BODY>
    <OTHER>这是其他东东</OTHER>
    </KK><KK>
    <TITLE>这是一个标题2</TITLE>
    <BODY>这是内容啊2</BODY>
    <OTHER>这是其他东东2</OTHER>
    </KK><KK>
    <TITLE>这是一个标题3</TITLE>
    <BODY>这是内容啊3</BODY>
    <OTHER>这是其他东东3</OTHER>
    </KK>
    XML;function foo($v) {
      print_r($v);
    }
    preg_replace_callback("#<TITLE>(.+)</TITLE>\s*<BODY>(.+)</BODY>\s*<OTHER>(.+)</OTHER>#", 'foo', $xml);
    Array
    (
        [0] => <TITLE>这是一个标题</TITLE>
    <BODY>这是内容啊</BODY>
    <OTHER>这是其他东东</OTHER>
        [1] => 这是一个标题
        [2] => 这是内容啊
        [3] => 这是其他东东
    )
    Array
    (
        [0] => <TITLE>这是一个标题2</TITLE>
    <BODY>这是内容啊2</BODY>
    <OTHER>这是其他东东2</OTHER>
        [1] => 这是一个标题2
        [2] => 这是内容啊2
        [3] => 这是其他东东2
    )
    Array
    (
        [0] => <TITLE>这是一个标题3</TITLE>
    <BODY>这是内容啊3</BODY>
    <OTHER>这是其他东东3</OTHER>
        [1] => 这是一个标题3
        [2] => 这是内容啊3
        [3] => 这是其他东东3
    )于是,你可以在回调函数里完成入库操作
    function foo($v) {
      $sql = "insert into tbl_name (title, body, other) values ('$v[1]', '$v[2]', '$v[3]')";
      mysql_query($sql);
    }
      

  6.   

    $str=(请在这里读取内容);preg_match_all("#<(?P<name>.+?)>(?=(?P<content>.+?)</\\1>)#is",$str,$rs,PREG_OFFSET_CAPTURE);
    foreach($rs['name'] as $k=>$v){
    if($v[0]=="KK") echo "--------------------------------<br>";
    else echo $v[0]."=".$rs['content'][$k][0]."<br>";
    }
      

  7.   

    是不是等级太高了,又变成了一个三角。bug ?
      

  8.   

    是啊 php有专门且强大的xml处理函数
    楼上真高手啊 
      

  9.   

    在其他讨论区依然是红星闪闪,到这里就变了
    只能说 csdn 歧视 php !而且连可用分都被清空了若不是对 php 有所偏好,早就不来这里了