I am using mysql_real_escape_string function while inserting the data into MySQL database. I am getting
“End tag ‘test_field’ does not match the start tag ‘End’. Error
processing resource”
while generating the XML. It looks like special characters or less than or greater than symbols causing this problem. Here is my code. Please let me know if there are any suggestions.
Here is PHP code.
$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 . ">";
}
$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>";
}
$xmlData .= "</" . $childElementName . ">";
}
$xmlData .= "</" . $rootElementName . ">";
}
I’d suggest using PHPs XMLWriter for generating the XML. You can easily generate valid XML-files with it and imo it is much more readable: