2009-07-06 97 views
1

将SQL作为输入,我必须查询PostgreSQL数据库并将结果作为XML返回。我已经用下面的代码这样做:使用PHP将PostgreSQL查询结果转换为XML DOM

<?php 

$link = "host=localhost dbname=company user=pgsql password=password"; 
$connect = pg_connect($link); 

$query = "SELECT * FROM customer"; 
$result = pg_query($connect, $query); 

$doc = new DomDocument("1.0"); 

$root = $doc->createElement('data'); 
$root = $doc->appendChild($root); 

while($row = pg_fetch_assoc($result)){ 
    $node = $doc->createElement('collection'); 
    $node = $root->appendChild($node); 

    foreach($row as $fieldname => $fieldvalue){ 
     $node->appendChild($doc->createElement($fieldname, $fieldvalue)); 
    } 
} 

$doc->save("cust.xml"); 

?> 

最后,我将被直接应用CSS样式表到XML文档。我将为每个“集合”节点指定样式信息。但是,有可能会有子集合的集合,甚至是子集合等等。

(所以说:师父,细节,子细节,子子的细节,等等)

的问题是,我的代码将只生成XML硕士,细节,子细节。我如何修改我的代码,以便生成的XML将始终“捕获”所有数据级别?

谢谢...


是的,我指的层次关系。例如,用我现在的代码,我可以看到“客户”表的所有字段属性。但是,如果其中一个客户属性是“地址”,而客户有多个地址?这将需要显示为...

<data> 
    <collection> 
    <fname>Joe</fname> 
    <lname>Smith</lname> 
    <address> 
     <address A> 123...</address A> 
     <address B> 234...</address B> 
    </collection> 
</data> 

我想修改我的代码,这样的事实“捡”该地址,虽然属性,有子属性...

回答

3

首先,您可以考虑在Postgres中使用可用的内置functions执行xml映射。这样做的两个好处是您的数据抽象功能保持在一起,并且Postgres比php更有效地执行此任务。如果您必须对xml进行更高级的修改,则xslt应该做到这一点。

至于你提到的问题,我不确定你是否指的是具有层次关系的表中的数据?