【问题标题】:Generate XML from PHP via SQL通过 SQL 从 PHP 生成 XML
【发布时间】:2011-03-21 11:08:15
【问题描述】:

运行此代码时出现错误.. 当数据库中没有特殊字符时,我运行良好。如果它有特殊字符那么我得到了错误请解决我非常感谢。

当数据库中的任何特殊字符(例如“'&?” CDDATA 也不适用于我的代码,我检查了它。请告诉我一些事情我怎样才能使错误更少的xml..

以下是代码:

    $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);

【问题讨论】:

  • 什么错误?不要无知。 ;)
  • Assigning xml generated by a while loop to a variable 的可能副本。换句话说,使用 DOM 或 XMLWriter。
  • 您是否运行了查询SET NAMES 'utf8'
  • @Gordon,你是看问题还是只看标题?
  • @jswolf 两者。我浏览了示例代码并注意到它使用字符串连接并且理解 OP 在特殊字符方面存在问题,这带来了一个问题,为什么他/她没有为这些事情使用更合适的工具,例如DOM 或 XMLWriter。链接的 dup 显示了如何使用它的示例。此外,在使用 XML (!= HTML) 时使用 htmlspecialchars 毫无意义。

标签: php mysql


【解决方案1】:

将您的 XML 包装在 CDATA 中

<![CDATA[your content here]]>

(这也将处理未被 htmlspecialchars() 替换的特殊字符)

【讨论】:

  • 如何请告诉我..
  • 例如,while 循环中的第三行如下所示:$_xml .=" &lt;productName&gt;&lt;![CDATA[" . htmlspecialchars($row['productName']) . "]]&gt;&lt;/productName&gt;";
【解决方案2】:

特殊字符在 xml 中是非法的,因此您需要在 CDATA 标记之间包装所有内容

例如:

$_xml .="   <subCategoryName><![CDATA[" . htmlspecialchars($row['subCategoryName']) . "]]></subCategoryName>"; 

阅读更多 -> http://www.w3schools.com/xml/xml_cdata.asp

你的代码应该是这样的:

$_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>";

如果这不起作用,则意味着还有其他问题,我建议您复制收到的错误并将其放入您的答案中,并可能截取存储在数据库中的内容。如果您需要帮助,请提供更多详细信息

【讨论】:

  • 问题没有解决...我会得到同样的错误...:('会出错
  • @Appz 如果您不打算使用 DOM 或 XMLWriter,那么至少用实际的错误消息更新您的问题怎么样?已在您的问题的 cmets 中要求您这样做。
  • 我更新并且我没有使用 DOM 或 XMLWriter 如果它很好并解决了我的问题然后请告诉我如何集成到我的代码 DOM / XMLWriter
  • @Appz Venture:您为什么将我的答案标记为已接受,然后将其删除......?您是否仅以我粘贴的行为例?因为你必须在任何地方都这样做
  • 我指定你回答正确,但我实际上并不正确请更正答案,所以我将其保留为正确.. 我知道我应该面对困难,但我该怎么办我有太多错误.. 请帮帮我错误是针对特殊字符的,或者你能告诉我它写入xml正确格式的任何替代方法,我可以在管理面板CMS代码中更改..将数据输入数据库时​​..我现在简单地插入记录
【解决方案3】:

很难判断您何时没有发布确切的错误。但是,我会尝试做一个狂热的猜测:检查编码。您很可能在数据库上使用拉丁瑞典语(AKA-ISO 8859-1),其余部分使用 utf8 ......反之亦然。我建议对所有内容都使用 utf8 并节省您的时间。

检查表编码,然后检查连接编码(mysql_* 函数默认可以使用 ISO-8859-1 进行连接,如果发生这种情况,您应该使用 http://php.net/manual/en/function.mysql-set-charset.php),这应该会有所帮助。

另外:为什么要连接字符串来生成 XML?使用适当的 XML 库(如 SimpleXML)是一个更好的主意(请注意还有其他库,您也可以检查 XMLWriter 和许多其他库)。链接:http://mx.php.net/manual/en/book.simplexml.php 和...我不能写其他链接,因为我是这里的新手 :) Google 是每个人的朋友。

如果你去 PEAR,还有更多的东西。

【讨论】:

    【解决方案4】:

    我并没有真正准确地回答你的问题,但也许你应该看看mysql xml abilities。这可能取决于您的 mysql 版本,尤其是如果您可能使用 CLI 方法来访问您的 sql。

    提到的文章确实描述了通过 sql 选择获取 xml 的稍微复杂的方法,尽管它在 5.0.67 (win32) 上对我有用。

    【讨论】:

      猜你喜欢
      • 2012-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多