将数据库表写入xml

时间:2012-03-10 12:44:24

标签: php xml database sqlite

首先,我不想要替代代码,我只想帮助完成这项工作。 使用下面的代码我想写出数据库表中的数据到xml文件,但我只得到“john”和“123”没有正确的xml标签,我的第二个foreach()不起作用,但第一个foreach()显示表的工作原理。

<?php

$dbhandle = sqlite_popen("propertydb", 0666, $err_msg);
if(!$dbhandle) die("Could not open the database");

$query = "CREATE TABLE property(pCode VARCHAR(8), price VARCHAR(6), 
iFile VARCHAR(15),          visits VARCHAR(3))";
if(!sqlite_query($dbhandle, $query)){ echo "table not created (maybe already
created)";
} 

$query = sqlite_query($dbhandle, 'SELECT * FROM property');  
$result = sqlite_fetch_all($query, SQLITE_ASSOC);  

foreach ($result as $arow) {
echo '<br> Postcode:  ' . $arow['pCode'] . '  Price:  ' . $arow['price'] . 
' Image  File:  ' . $arow['iFile'] . ' Visits:  ' . $arow['visits'];
}

$outfilepointer = fopen("property.xml","w");
$outtext = "<estateagent> \n";
$outtext .= "<agentname>john</agentname> \n";
$outtext .= "<agentphone>123</agentphone> \n";
foreach ($result->property as $oneproperty)
{
$propertyname = $oneproperty->propertyname;
outtext .= '<property><postcode> $arow["pCode"] </postcode>
<price> $arow["price"]</price> <imagefile> $arow["iFile"] </imagefile> <visits>
$arow["visits"] 
</visits>    </property> \n';
}
$outtex .= "</estateagent>";
fwrite($outfilepointer, $outtext);
fclose($outfilepointer);
sqlite_close($dbhandle);
?>

这就是我的输出应该......

<estateagent>
<agentname></agentname>
<agentphone></agentphone>
<property>
<postcode></postcode><price></price><imagefile></imagefile><visits></visits>
</property>
<property>...</property>
<property>...</property>
</estateagent>

1 个答案:

答案 0 :(得分:1)

我只是尝试使用您的代码,XML标记确实显示出来。尝试在记事本中打开它以查看。

至于你的foreach循环,你需要连接你的字符串。

outtext .= '<property><postcode> $arow["pCode"] </postcode> 
<price> $arow["price"]</price> <imagefile> $arow["iFile"] </imagefile> <visits> 
$arow["visits"]  
</visits>    </property> \n'; 

对于foreach,我的理解是sqlite_fetch_all返回一个数组。您将其视为变量。

尝试使用:foreach ($result as $oneproperty)。由于我不确定您的数据库是如何构建的,如果这对您不起作用,请使用$result发布var_dump($result)的输出。

上述意味着将输出文字字符串,不会插入任何变量。你需要这样做:

outtext .= '<property><postcode>'. $arow["pCode"]. '</postcode> 
<price>'. $arow["price"].'</price> <imagefile>'. $arow["iFile"].' </imagefile> <visits>'. 
$arow["visits"].'
</visits>    </property> \n'; 

最后,不要使用字符串手动创建标记,而应考虑使用XML Writer