您好我正在尝试将数据附加到现有文件中,如果没有创建新文件并保存它。 相反,我的代码保存了一次数据。下一个数据集只会覆盖第一个。 请帮我弄清楚我做错了什么......
在评论之后我改变了代码,现在我最终得到了 警告:DOMDocument :: load()[domdocument.load]:文档末尾的额外内容
function toXml($reg)
{
$xmlFile = "customers.xml";
$doc = new DomDocument('1.0');
$doc->load( $xmlFile);
$cusCart = $doc -> createElement('cusCart');
//$cusCart = $doc->appendChild($cusCart);
foreach ($reg as $item => $val )
{
$customer = $doc->createElement('customer');
$customer = $cusCart->appendChild($customer);
$cusId = $doc->createElement('cusId');
$cusId = $customer->appendChild($cusId);
$value = $doc->createTextNode($item);
$value = $cusId->appendChild($value);
$fName = $doc->createElement('fName');
$fName = $customer->appendChild($fName);
$value1 = $doc->createTextNode($val["fName"]);
$value1 = $fName->appendChild($value1);
$lName = $doc->createElement('lName');
$lName = $customer->appendChild($lName);
$value2 = $doc->createTextNode($val["lName"]);
$value2 = $lName->appendChild($value2);
$phone = $doc->createElement('phone');
$phone = $customer->appendChild($phone);
$value3 = $doc->createTextNode($val["phone"]);
$value3 = $phone->appendChild($value3);
$email = $doc->createElement('email');
$email = $customer->appendChild($email);
$value4 = $doc->createTextNode($val["email"]);
$value4 = $email->appendChild($value4);
$pwd = $doc->createElement('pw');
$pwd = $customer->appendChild($pwd);
$value5 = $doc->createTextNode($val["pw"]);
$value5 = $pwd->appendChild($value5);
}
$cusCart = $doc->appendChild($cusCart);
$doc->save($xmlFile);
$strXml = $doc->saveXML();
echo("<br>----- DATA RECOREDED!!! ----");
return $strXml;
}
答案 0 :(得分:0)
在将节点和属性附加到其父节点之前,应将其添加到节点。请尝试以下
function toXml($reg){
$doc = new DomDocument('1.0');
$doc->load( 'cusXML.xml');
$cusCart = $doc -> createElement('cusCart');
foreach ($reg as $item => $val )
{
$customer = $doc->createElement('customer');
// Create cusId node
$cusId = $doc->createElement('cusId');
$value = $doc->createTextNode($item);
$value = $cusId->appendChild($value);
$cusId = $customer->appendChild($cusId);
// Create pw node
$pwd = $doc->createElement('pw');
$value5 = $doc->createTextNode($val["pw"]);
$value5 = $pwd->appendChild($value5);
$pwd = $customer->appendChild($pwd);
$customer = $cusCart->appendChild($customer);
}
$cusCart = $doc->appendChild($cusCart);
if(file_exists('cusXML.xml')) { $doc->save("cusXML.xml"); }
else{ $doc->save("cusXML.xml"); }
$strXml = $doc->saveXML();
echo("<br>----- DATA RECOREDED!!! ----");
return $strXml;
}
答案 1 :(得分:0)
在XML文档结束后,您可能还有text
或tag
。像
<?xml version="1.0"?>
<document>
<article>sample</article>
</document>
</xml>
所以只需删除root
元素之后的其他文本。在上面的示例中,根元素为</document>
,其他文本或元素为</xml>
。
当您动态生成XML时,请在进一步处理之前先检查XML,并在根元素结束后识别其他文本。
答案 2 :(得分:0)
这导致了格式错误的xml文件。 我的xml文件是
<cusCart> <customer> <cusid>...</cusid> </customer> </cusCart>
在我的代码上每次调用(根元素)。所以每次我追加
<cusCart> <customer> <cusid>...</cusid> </customer> </cusCart><cusCart> <customer> <cusid>...</cusid> </customer> </cusCart>
发生了
相反,我必须调用root一次才能追加<customer> <cusid>...</cusid> </customer><customer> <cusid>...</cusid> </customer>
感谢您的提示!