简体   繁体   English

尝试将新节点添加到xml文档时出现错误的文档错误。 使用DOM和PHP

[英]Wrong Document Error while trying to add new node to xml document. Using DOM and PHP

I want to create attribute and add it to xml element. 我想创建属性并将其添加到xml元素。 I always get Wrong Document Error when i try to add any attribute or child elements to $commentElement. 当我尝试将任何属性或子元素添加到$ 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? 有什么帮助吗?

Your new attribute is already a part of the current DOM object, even though it's not part of the DOM tree yet. 您的新属性已经是当前DOM对象的一部分,即使它还不是DOM树的一部分。 importNode() is for importing nodes from OTHER DOM documents. importNode()用于从其他 DOM文档中导入节点。

Most likely you'd simply want this: 您最有可能只是想要这样:

$parentElement->appendChild($atttribute);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM