通过SQL从PHP生成XML
我在运行此代码时出错。。当数据库中没有特殊字符时,我运行良好。如果它有特殊的字符,那么我得到了错误,请解决我,我非常感谢 当数据库中出现诸如“'&?”之类的特殊字符时,就会出现以下错误。我不知道为什么会出现这些错误。。我没有使用DOM或XMLWrite,只是简单地通过文件创建xml,并将CDDATA不适用于我的代码的一件事记录下来,我检查了它。请告诉我一些事情,我如何才能使xml的错误少 代码如下:通过SQL从PHP生成XML,php,mysql,Php,Mysql,我在运行此代码时出错。。当数据库中没有特殊字符时,我运行良好。如果它有特殊的字符,那么我得到了错误,请解决我,我非常感谢 当数据库中出现诸如“'&?”之类的特殊字符时,就会出现以下错误。我不知道为什么会出现这些错误。。我没有使用DOM或XMLWrite,只是简单地通过文件创建xml,并将CDDATA不适用于我的代码的一件事记录下来,我检查了它。请告诉我一些事情,我如何才能使xml的错误少 代码如下: $file= fopen("../xml/{$productID}.xml" , "w"
$file= fopen("../xml/{$productID}.xml" , "w");
$_xml ="<?xml version=\"1.0\" encoding=\"UTF-8\" ?>";
$_XML = "<!DOCTYPE Server SYSTEM \"opt/pdos/etc/pdoslrd.dtd\">";
$_xml .="<productsnode>";
while ($row = mysql_fetch_array($productQuery, MYSQL_ASSOC)) {
$_xml .=" <product>";
$_xml .=" <productID>" . $row['productID'] . "</productID>";
$_xml .=" <productName>" . htmlspecialchars($row['productName']) . "</productName>";
$_xml .=" <productDescription>" . htmlspecialchars($row['productDescription']) . "</productDescription>";
$_xml .=" <productPicture>" . htmlspecialchars($row['productPic']) . "</productPicture>";
$_xml .=" <category>";
$_xml .=" <categoryID>" . $row['categoryID'] . "</categoryID>";
$_xml .=" <categoryName>" . htmlspecialchars($row['categoryName']) . "</categoryName>";
$_xml .=" <categoryDescription>" . htmlspecialchars($row['categoryDiscription']) . "</categoryDescription>";
$_xml .=" <categoryPicture>" . htmlspecialchars($row['categoryPic']) . "</categoryPicture>";
$_xml .=" <subCategory>";
$_xml .=" <subCategoryID>" . $row['subCategoryID'] . "</subCategoryID>";
$_xml .=" <subCategoryName>" . htmlspecialchars($row['subCategoryName']) . "</subCategoryName>";
$_xml .=" <subCategoryDetail>" . htmlspecialchars($row['subCategoryDescription']) . "</subCategoryDetail>";
$_xml .=" </subCategory>";
$_xml .=" </category>";
$_xml .=" </product>";
}
$_xml .="</productsnode>";
fwrite($file, $_xml);
fclose($file);
$file=fopen(“../xml/{$productID}.xml”,“w”);
$_xml=“”;
$_XML=“”;
$_xml.=“”;
而($row=mysql\u fetch\u数组($productQuery,mysql\u ASSOC)){
$_xml.=“”;
$\u xml.=''.$行['productID']。'';
$\u xml.=''.htmlspecialchars($row['productName']);
$\u xml.=''.htmlspecialchars($row['productDescription']);
$\u xml.=''.htmlspecialchars($row['productPic']);
$_xml.=“”;
$\u xml.=''.$行['categoryID'];
$\u xml.=''.htmlspecialchars($row['categoryName']);
$\u xml.=''.htmlspecialchars($row['categoryDiscription']);
$\u xml.=''.htmlspecialchars($row['categoryPic']);
$_xml.=“”;
$\u xml.=''.$行['subcategory id'];
$\u xml.=''.htmlspecialchars($row['subcategory name']);
$\u xml.=''.htmlspecialchars($row['subcategory description']);
$_xml.=“”;
$_xml.=“”;
$_xml.=“”;
}
$_xml.=“”;
fwrite($file,$\uxml);
fclose($文件);
在CDATA中包装您的XML
<![CDATA[your content here]]>
(这还将处理不会被htmlspecialchars()替换的特殊字符)将XML包装到CDATA中
<![CDATA[your content here]]>
(这还将处理没有被htmlspecialchars()替换的特殊字符)很难判断您何时没有发布确切的错误。然而,我将尝试做一个狂热的猜测:检查编码。很可能您在数据库中使用的是拉丁瑞典语(AKA-iso8859-1),其余部分使用的是utf8。。。或者维切维萨。我会建议使用utf8的一切,节省您的时间 检查表编码,然后选择连接编码(默认情况下,mysql_*函数可以使用ISO-8859-1进行连接,您应该在发生这种情况时使用),这应该会有所帮助 另外:为什么要连接字符串以生成XML?使用像SimpleXML这样的适当的XML库(请注意还有其他库,您可以检查XMLWriter和许多其他库)是一个更好的主意。链接:和。。。我不能写其他链接,因为我是这里的新手:)谷歌是每个人的朋友
如果你去PEAR,会有更多的内容。很难判断你什么时候没有发布准确的错误。然而,我将尝试做一个狂热的猜测:检查编码。很可能您在数据库中使用的是拉丁瑞典语(AKA-iso8859-1),其余部分使用的是utf8。。。或者维切维萨。我会建议使用utf8的一切,节省您的时间 检查表编码,然后选择连接编码(默认情况下,mysql_*函数可以使用ISO-8859-1进行连接,您应该在发生这种情况时使用),这应该会有所帮助 另外:为什么要连接字符串以生成XML?使用像SimpleXML这样的适当的XML库(请注意还有其他库,您可以检查XMLWriter和许多其他库)是一个更好的主意。链接:和。。。我不能写其他链接,因为我是这里的新手:)谷歌是每个人的朋友
如果你去PEAR,会有更多的内容。特殊字符在xml中是非法的,所以你需要在CDATA标记之间包装所有内容 例如:
$\uXML.=”;
请访问->
您的代码应该类似于:
$_xml .=" <product>";
$_xml .=" <productID><![CDATA[" . $row['productID'] . "]]></productID>";
$_xml .=" <productName><![CDATA[" . htmlspecialchars($row['productName']) . "]]></productName>";
$_xml .=" <productDescription><![CDATA[" . htmlspecialchars($row['productDescription']) . "]]></productDescription>";
$_xml .=" <productPicture><![CDATA[" . htmlspecialchars($row['productPic']) . "]]></productPicture>";
$_xml .=" <category>";
$_xml .=" <categoryID><![CDATA[" . $row['categoryID'] . "]]></categoryID>";
$_xml .=" <categoryName><![CDATA[" . htmlspecialchars($row['categoryName']) . "]]></categoryName>";
$_xml .=" <categoryDescription><![CDATA[" . htmlspecialchars($row['categoryDiscription']) . "]]></categoryDescription>";
$_xml .=" <categoryPicture><![CDATA[" . htmlspecialchars($row['categoryPic']) . "]]></categoryPicture>";
$_xml .=" <subCategory>";
$_xml .=" <subCategoryID><![CDATA[" . $row['subCategoryID'] . "]]></subCategoryID>";
$_xml .=" <subCategoryName><![CDATA[" . htmlspecialchars($row['subCategoryName']) . "]]></subCategoryName>";
$_xml .=" <subCategoryDetail><![CDATA[" . htmlspecialchars($row['subCategoryDescription']) . "]]></subCategoryDetail>";
$_xml .=" </subCategory>";
$_xml .=" </category>";
$_xml .=" </product>";
$\uXML.=”;
$_xml.=“”;
$_xml.=“”;
$_xml.=“”;
$_xml.=“”;
$_xml.=“”;
$_xml.=“”;
$_xml.=“”;
$_xml.=“”;
$_xml.=“”;
$_xml.=“”;
$_xml.=“”;
$_xml.=“”;
$_xml.=“”;
$_xml.=“”;
$_xml.=“”;
$_xml.=“”;
如果这不起作用,这意味着还有其他问题,我建议你复制你得到的错误,并把它放在你的答案中,也许可以截图显示数据库中存储的内容。如果您需要帮助,请提供更多详细信息特殊字符在xml中是非法的,因此您需要在CDATA标记之间包装所有内容 例如:
$\uXML.=”;
请访问->
您的代码应该类似于:
$_xml .=" <product>";
$_xml .=" <productID><![CDATA[" . $row['productID'] . "]]></productID>";
$_xml .=" <productName><![CDATA[" . htmlspecialchars($row['productName']) . "]]></productName>";
$_xml .=" <productDescription><![CDATA[" . htmlspecialchars($row['productDescription']) . "]]></productDescription>";
$_xml .=" <productPicture><![CDATA[" . htmlspecialchars($row['productPic']) . "]]></productPicture>";
$_xml .=" <category>";
$_xml .=" <categoryID><![CDATA[" . $row['categoryID'] . "]]></categoryID>";
$_xml .=" <categoryName><![CDATA[" . htmlspecialchars($row['categoryName']) . "]]></categoryName>";
$_xml .=" <categoryDescription><![CDATA[" . htmlspecialchars($row['categoryDiscription']) . "]]></categoryDescription>";
$_xml .=" <categoryPicture><![CDATA[" . htmlspecialchars($row['categoryPic']) . "]]></categoryPicture>";
$_xml .=" <subCategory>";
$_xml .=" <subCategoryID><![CDATA[" . $row['subCategoryID'] . "]]></subCategoryID>";
$_xml .=" <subCategoryName><![CDATA[" . htmlspecialchars($row['subCategoryName']) . "]]></subCategoryName>";
$_xml .=" <subCategoryDetail><![CDATA[" . htmlspecialchars($row['subCategoryDescription']) . "]]></subCategoryDetail>";
$_xml .=" </subCategory>";
$_xml .=" </category>";
$_xml .=" </product>";
$\uXML.=”;
$_xml.=“”;
$_xml.=“”;
$_xml.=“”;
$_xml.=“”;
$_xml.=“”;
$_xml.=“”;
$_xml.=“”;
$_xml.=“”;
$_xml.=“”;
$_xml.=“”;
$_xml.=“”;
$_xml.=“”;
$_xml.=“”;
$_xml.=“”;
$_xml.=“”;
$_xml.=“”;
如果这不起作用,这意味着还有其他问题,我建议你复制你得到的错误,并把它放在你的答案中,也许可以截图显示数据库中存储的内容。如果您需要帮助,请提供更多详细信息我并没有确切回答您的问题,但也许您应该看看。这可能取决于您的mysql版本,尤其是如果您可以使用CLI方法访问sql
提到的这篇文章确实描述了通过sql选择获取xml的稍微复杂一些的方法,尽管这种方法在5.0.67(win32)上对我很有效。我并没有确切地回答你的问题,但也许你应该看看。这位妈妈