1

基本的に、SQL クエリを動的 XML に変換しています。クエリから取得した要素のカスタム XML タグを作成しようとしていますが、クエリのどの結果を 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;

?>
4

2 に答える 2

1

まず、mysql_*関数を使用しないことをお勧めします。 それらは廃止され、廃止されます。

この状況では、 Dom 拡張はやり過ぎのようです。可能な場合は、 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();
于 2013-01-03T20:41:52.220 に答える
0

XML_Serializer は php pear ユーザーにとって非常に便利です

于 2013-01-03T22:26:16.057 に答える