Reputation: 327
I want to create attribute and add it to xml element. I always get Wrong Document Error when i try to add any attribute or child elements to $commentElement. Error occurs in line marked with comment: // error. Here's my code:
if (empty($_POST['userName']))
printErrorMessage("Username is not filled in");
if (empty($_POST['commentArea']))
printErrorMessage("Comment is not filled in");
$username = mysql_real_escape_string($_POST['userName']);
$comment = mysql_real_escape_string($_POST['commentArea']);
$newsId = $_GET['newsId'];
$fileContainingNew = $_GET['fileContainingNew'];
$xmlDoc = new DOMDocument('1.0', 'windows-1257');
$root = NULL;
$commentId = NULL;
$commentElement = $xmlDoc->createElement("komentaras");
if (!file_exists(substr($fileContainingNew, 0, strlen($fileContainingNew) - 4) . "Comments.xml")) {
$root = $xmlDoc->createElement("naujienuKomentarai");
$xmlDoc->appendChild($root);
$commentId = 1;
}
else {
$xmlDoc->load(substr($fileContainingNew, 0, strlen($fileContainingNew) - 4) . "Comments.xml");
$commentsList = $xmlDoc->getElementsByTagName("komentaras");
if ($commentsList->length == 0)
$commentId = 1;
else {
$biggestCommentId = 0;
foreach ($commentsList as $comment){
if ($newsId == $comment->getAttributeNode("newId")->value){
if ($comment->getAttributeNode("commentId")->value > $biggestCommentId)
$biggestCommentId = $comment->getAttributeNode("commentId")->value;
}
}
$commentId = $biggestCommentId++;
}
$root = $xmlDoc->documentElement;
}
$root->appendChild($commentElement);//error
$commentElement = appendAttribute($xmlDoc, $commentElement, "newId", $newsId);
$commentElement = appendAttribute($xmlDoc, $commentElement, "commentId", $commentId);
$commentElement = appendElement($xmlDoc, $commentElement, "autorius", $username);
$commentElement = appendElement($xmlDoc, $commentElement, "data", '20' . date("y-m-d"));
$commentElement = appendElement($xmlDoc, $commentElement, "laikas", "no val");
$commentElement = appendElement($xmlDoc, $commentElement, "ip", $_SERVER['REMOTE_ADDR']);
$commentElement = appendElement($xmlDoc, $commentElement, "komentaroTekstas", $comment);
$xmlDoc->formatOutput = true;
$xmlDoc->save(substr($fileContainingNew, 0, strlen($fileContainingNew) - 4) . "Comments.xml");
function appendAttribute($xmlDoc, $parentElement, $attributeName, $newAttributeValue){
$attribute = $xmlDoc->createAttribute($attributeName);
$attributeValue = $xmlDoc->createTextNode($newAttributeValue);
$parentElement->appendChild($attribute);
$attribute->appendChild($attributeValue);
return $parentElement;
}
function appendElement($xmlDoc, $parentElement, $newElementName, $newElementValue){
$newElement = $xmlDoc->createElement($newElementName);
$elementValue = $xmlDoc->createTextNode($newElementValue);
$newElement->appendChild($elementValue);
$parentElement->appendChild($newElement);
return $parentElement;
}
Any help?
Upvotes: 2
Views: 3387
Reputation: 360702
Your new attribute is already a part of the current DOM object, even though it's not part of the DOM tree yet. importNode() is for importing nodes from OTHER DOM documents.
Most likely you'd simply want this:
$parentElement->appendChild($atttribute);
Upvotes: 1