我正在尝试将数据保存到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文件看起来像下图中的内容。
我不明白为什么我的XML文件中缺少名称开始标记以及为什么我的数据$ name也没有保存到XML文件中。我怎么能解决这个问题。任何帮助,将不胜感激。提前致谢
答案 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 属性设置为输入而不是名称属性。