使用XPath处理多个XML文件

时间:2013-01-23 07:14:58

标签: php mysql xml

我想使用xpath方法将多个XML文件中的多个节点值插入MySQL。代码如下:

<?php 
$path="fs/";
$con = mysql_connect("localhost","sufi","1234"); 
if (!$con) { 
    die('Could not connect: ' . mysql_error()); 
} 
mysql_select_db("test", $con);
if ( $handle = opendir($path) ) { 
     $files = array(); 
     while ( ($file = readdir($handle)) !== false ) { 
           $files[] = $file; 
     } 
     sort($files); 
     foreach ( $files as $file ) {
         $xml = simplexml_load_file("$file"); 
         $products[0] = (string)current($xml->xpath("/sioct:BoardPost/sioc:content"));
         $products[1] = (string)current($xml->xpath("/sioct:BoardPost/dcterms:created")); 
         $products[2] = (string)current($xml->xpath("/sioct:BoardPost/@rdfabout"));
         extract($products); 
         mysql_query("INSERT INTO forum (txt_content,txt_date,txt_about) 
                      VALUES ( '".mysql_escape_string($products[0])."',
                               '".mysql_escape_string($products[1])."',
                               '".mysql_escape_string($products[2])."')" ); 
     } 
} 
?>

但是这给了我以下错误:

  

警告:simplexml_load_file(。)[function.simplexml-load-file]:   无法打开流:C:\ wamp \ www \ readfiles.php中的权限被拒绝   在第22行,警告:simplexml_load_file()   [function.simplexml-load-file]:I / O警告:无法加载外部   实体 ”。”在第22行的C:\ wamp \ www \ readfiles.php中,致命错误:致电   到一个非对象的成员函数xpath()   第23行的C:\ wamp \ www \ readfiles.php。

请提出一些解决方法。

1 个答案:

答案 0 :(得分:0)

readdir()也会返回“。”和“..”,这是错误消息试图告诉你的地方:

  

警告:simplexml_load_file(。)[function.simplexml-load-file]:失败   打开流:C:\ wamp \ www \ readfiles.php中的权限被拒绝   22,警告:simplexml_load_file()[function.simplexml-load-file]:I / O.   警告:无法加载外部实体“。”   第22行的C:\ wamp \ www \ readfiles.php,致命错误:致电会员   函数xpath()在C:\ wamp \ www \ readfiles.php中的非对象上   23

您可以改为使用glob

foreach(glob($path . "/*.xml") as $file)