2009-07-06 93 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應該做到這一點。

至於你提到的問題,我不確定你是否指的是具有層次關係的表中的數據?