数据未正确保存到XML文件中

时间:2014-01-17 14:22:55

标签: php xml domdocument

我正在尝试将数据保存到XML文件中。

if (isset( $_POST['submit'])) { 

   $name =  mysql_real_escape_string($_POST['name']);


   $xml = new DOMDocument("1.0", "ISO-8859-1");
   $xml->preserveWhiteSpace = false;
   $xml->load('/var/www/Report/file.xml');

   $element = $xml->getElementsByTagName('entries');
   $newItem = $xml->createElement('reports');

   $newItem->appendChild($xml->createElement('timestamp', date("F j, Y, g:i a",time())));
   $newItem->appendChild($xml->createElement('name', $name));
   $element -> item(0) -> appendChild($newItem);    

   $xml->formatOutput = true; // this adds spaces, new lines and makes the XML more readable format.
   $xmlString = $xml->saveXML(); // $xmlString contains the entire String
   $xml->save('/var/www/Report/file.xml');

}

无论何时我使用mysql_real_escape_string()来转义我的字符串中的特殊字符或尝试清理我的数据,我的XML文件看起来像下图中的内容。

enter image description here

我不明白为什么我的XML文件中缺少名称开始标记以及为什么我的数据$ name也没有保存到XML文件中。我怎么能解决这个问题。任何帮助,将不胜感激。提前致谢

1 个答案:

答案 0 :(得分:0)

1)Firefox不会逐字节显示xml,而是将其自身格式化。因此,无论它们如何出现在xml源中,空元素只显示一个自闭标记。如果要查看确切的xml输出,请在文本编辑器中打开它。

2) mysql_real_escape_string 转义对于mysql而不是对于XML有问题的字符:例如,它不会转义'<'。相反,你应该使用 DOMDocument :: createTextNode 。而不是

$newItem->appendChild($xml->createElement('name', $name));

使用

$nameElement = $xml->createElement('name');
$nameElement->appendChild( $xml->createTextNode($name) );
$newItem->appendChild($nameElement);

3)如您所见,$name为空,但我不知道您的POST数据只看到此代码会出现什么问题,表单中可能没有<input name='name' /> :我有时会意外地将 id 属性设置为输入而不是名称属性。