2013-01-03 54 views
1

基本上,我正在使用SQL查詢並將其轉換爲動態XML。我正在嘗試爲我從查詢中獲得的元素創建自定義XML標記,並且希望從我的查詢中選擇哪些結果用作XML元素。如何將SQL查詢的結果轉換爲XML?

在一個完美的世界中,我希望能夠從查詢中獲取每一行並確定XML屬性。我想這是一個循環,但我似乎無法讓它工作。

$sql = "SELECT 
COUNT(l.log_id) AS id, 
l.status AS 'requestStatus', 
d.firmname AS 'name', 
DAY (FROM_UNIXTIME(l.time)) AS DAY, 
WEEK(FROM_UNIXTIME(l.time)) AS week, 
YEAR(FROM_UNIXTIME(l.time)) AS year 

FROM $table_id1, $table_id2 
WHERE 
l.client = 'XXXXX' AND 
l.time > 1 AND 
l.work_id = d.subid AND 
d.deleted = 0 AND 
d.user_id = l.user_id 

GROUP BY 
YEAR(FROM_UNIXTIME(l.time)), 
WEEK(FROM_UNIXTIME(l.time)) 

ORDER BY 
week DESC"; 

$dbresult = mysql_query($sql); 

// create a new XML document 
$doc = new DomDocument('1.0', 'UTF-8'); 
$doc->formatOutput = true; 

// create root node 
$root = $doc->createElement('workResponse'); 
$root = $doc->appendChild($root); 
$occ2 = $doc->createElement('contentResponses'); 
$occ2 = $root->appendChild($occ2); 


// process one row at a time 
while($row = mysql_fetch_assoc($dbresult)) { 

// add node for each row 
$occ = $doc->createElement("contentResponse"); 
$occ = $root->appendChild($occ); 


// add a child node for each field 
foreach ($row as $fieldname => $fieldvalue) { 
    $child = $doc->createElement($fieldname); 
    $child = $occ->appendChild($child); 
    $value = $doc->createTextNode($fieldvalue); 
    $value = $child->appendChild($value); 

    } // foreach 

}// while 

// get completed xml document 
$xml_string = $doc->saveXML(); 

echo $xml_string; 

?> 

回答

1

首先,我建議不要使用mysql_*函數。 They are deprecated and going away

Dom extension似乎是在這種情況下矯枉過正。我可以的話我更喜歡使用SimpleXML

<?php 

$dbh = new PDO('mysql:host=localhost;dbname=test','username','password'); 

$sxe = new SimpleXMLElement('<workResponse></workResponse>'); 
$sxe_crs = $sxe->addChild('contentResponses'); 

function array_walk_simplexml(&$value, $key, &$sx) { 
    $sx->addChild($key, $value); 
} 

$stmt = $dbh->query('SELECT * FROM sometable'); 

while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { 
    $sx_cr = $sxe_crs->addChild('contentResponse'); 
    array_walk($row, 'array_walk_simplexml', $sx_cr); 
} 

echo $sxe->asXML(); 

如果你想「漂亮地打印」XML(敬佩你的工作?),那麼你需要使用Dom擴展。

$dom_sxe = dom_import_simplexml($sxe); 
$dom = new DOMDocument('1.0'); 
$dom->formatOutput = true; 
$dom_sxe = $dom->importNode($dom_sxe, true); 
$dom_sxe = $dom->appendChild($dom_sxe); 

echo $dom->saveXML(); 
0

XML_Serializer是PHP梨用戶來說非常實用