2011-12-08 1 views
1

親子テーブルからXMLを生成しようとしています。ここで私が達成しようとしているXML形式です。 PHPコードは1つのテーブルに対してのみ機能します。私は子テーブルからXMLを生成する方法がわかりません。私はどんな助けにも感謝します。親子テーブルのXMLデータを生成する

<SalesOrder> 
    <Sales> 
    <SalesOrderNumber>SO43660</SalesOrderNumber> 
    <PurchaseOrderNumber>PO18850127500</PurchaseOrderNumber> 
    <AccountNumber>3333</AccountNumber> 
    <OrderDate>2001-07-01</OrderDate> 
    <Details> 
     <SalesOrderDetailID>13</SalesOrderDetailID> 
     <Name>Road-650 Red, 44</Name> 
     <CarrierTrackingNumber>6431-4D57-83</CarrierTrackingNumber> 
    </Details> 
    <Details> 
     <SalesOrderDetailID>14</SalesOrderDetailID> 
     <Name>Road-450 Red, 52</Name> 
     <CarrierTrackingNumber>6431-4D57-83</CarrierTrackingNumber> 
    </Details> 
    </Sales> 
    </SalesOrder> 

ここはPHPコードです。

$result = mysql_query("SELECT * from table1"); 

header("Content-Type: application/xml"); 
echo sqlToXml($result, "SalesOrder", "sales"); 

function sqlToXml($queryResult, $rootElementName, $childElementName) 
{ 

$xmlData = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>\n"; 
$xmlData .= "<" . $rootElementName . ">"; 

while($record = mysql_fetch_object($queryResult)) 
{ 
    $xmlData .= "<" . $childElementName . ">"; 
    for ($i = 0; $i < mysql_num_fields($queryResult); $i++) 
    { 
     $fieldName = mysql_field_name($queryResult, $i); 
     $xmlData .= "<" . $fieldName . ">"; 
     if(!empty($record->$fieldName)) 
      $xmlData .= $record->$fieldName; 
     else 
      $xmlData .= "null"; 

     $xmlData .= "</" . $fieldName . ">"; 
    } 
    $xmlData .= "</" . $childElementName . ">"; 
} 
$xmlData .= "</" . $rootElementName . ">"; 
} 

ここにスキーマがあります。これらの2行の間に

SalesOrder Table        SalesOrderDetail 
----------------        ------------------ 
SalesOrderNumber Varchar(20)     SalesOrderDetailID INT 
PurchaseOrderNumber Varchar(20)    SalesOrderNumber  Varchar(20) 
AccountNumber  Varchar(20)    Name     Varchar(30)  
OrderDate   Date      CarrierTrackingNumber Varchar(30) 
+0

にXML文字列($xmlData

リンクに追加しますが、子テーブルとはどういう意味ですか?スキーマとそれぞれのデータの例を含めることができます...ありがとう – ManseUK

+0

私はスキーマで更新しました。サンプルデータは、私のXMLファイルにあります。ご協力いただきありがとうございます。 – nav100

答えて

0

} 
$xmlData .= "</" . $childElementName . ">"; 

追加し、次の

$detail = mysql_query("SELECT * from table2 WHERE salesordernumber = '".$record->SalesOrderNumber."'"); 
while ($row = mysql_fetch_object($detail)) { 
    $xmlData .= "<Details>"; 
    $xmlData .= "<SalesOrderDetailID>" . $row->SalesOrderDetailID . "</SalesOrderDetailID>"; 
    $xmlData .= "<Name>" . $row->Name . "</Name>"; 
    $xmlData .= "<CarrierTrackingNumber>" . $row->CarrierTrackingNumber . "</CarrierTrackingNumber>"; 
    $xmlData .= "</Details>"; 
} 

最初の行は 二行目は、第二のテーブルからデータを取得するクエリを実行します返されたレコードをループして、$rowを各レコードのオブジェクトにします。 whileループ内のすべてがmysql_fetch_objectドキュメント

+0

ありがとうございます。できます。私はあなたの助けに感謝します。 – nav100

関連する問題