gpt4 book ai didi

PHP XML DOM 未捕获异常 'DOMException',消息为 'Wrong Document Error'

转载 作者:可可西里 更新时间:2023-10-31 22:07:39 26 4
gpt4 key购买 nike

我正在尝试学习 XML,并且我知道这是一个没有正确导入节点的问题。但我不太明白。我环顾四周,发现大多数人没有像我在部门中那样拥有多个子元素。

这是我的 XML 结构:

<SOT>  
<DEPARTMENT name="Aviation Technology" id="AT">
<EMPLOYEE type="Faculty">
<LOGIN>jdoe1</LOGIN>
<NAME>John Doe</NAME>
</EMPLOYEE>

<EMPLOYEE type="Faculty">
<LOGIN>jdoe2</LOGIN>
<NAME>Jane Doe</NAME>
</EMPLOYEE>

<EMPLOYEE type="Faculty">
<LOGIN>jdoe3</LOGIN>
<NAME>Joe Doe</NAME>
</EMPLOYEE>
</DEPARTMENT>

<DEPARTMENT name="Building and Construction Management" id="BCM">
</DEPARTMENT>

<DEPARTMENT name="Computer Graphics Technology" id="CGT">
</DEPARTMENT>
</SOT>

我知道 SOT 是我的根元素,部门是 SOT 的“ child ”,每个部门都有多个员工“ child ”。我遇到的问题是当我试图向某个部门添加新员工时。当我尝试 $departmentArray->item($i)->appendChild($employee); 时,我得到错误文档错误。

我正在使用此 PHP 代码尝试将 child 附加到 departmentNode

<?php

//grab form data
$username = $_POST['username'];
$employeeName = $_POST['employeeName'];
$department = $_POST['department'];

//create new DOMDocument to hold current XML data
$doc = new DOMDocument();
$doc->load("test.xml");
$xpath = new DOMXpath($doc);

//create our new DOMDocument for combining the XML data
$newDoc = new DOMDocument();
$newDoc->preserveWhiteSpace = false;

//create School of Tech Node and append to new doc
$sotElement = $newDoc->createElement("SOT");
$newDoc->appendChild($sotElement);
$root = $newDoc->documentElement;

//grab the department Nodes
$departmentArray = $doc->getElementsByTagName("DEPARTMENT");

//create a new employee and set attribute to faculty
$employee = $newDoc->createElement("EMPLOYEE");
$employee->setAttribute("type", "Faculty");

//counters (might use them later for ->item(counter) function
$indexCounter = 0;
$i = 0;

foreach($departmentArray as $departmentNode){
if(strcmp($departmentNode->getAttribute('name'),$department) == 0){//check if departments match
//create login element
$loginNode = $newDoc->createElement("LOGIN");
$loginNode->appendChild($newDoc->createTextNode($username));
$employee->appendChild($loginNode);

//create name node
$nameNode = $newDoc->createElement("NAME");
$nameNode->appendChild($newDoc->createTextNode($employeeName));
$employee->appendChild($nameNode);

//append employee onto department node
//$departmentArray->item($i) = $doc->importNode($departmentArray->item($i), true);
$departmentArray->item($i)->appendChild($employee);

//set index of department array (possibly used for appending later)
$indexCounter = $i;
}
$i++;
}

#######################################
/*Write out data to XML file */
#######################################
//$departmentArray = $doc->getElementsByTagName("DEPARTMENT");
foreach($departmentArray as $departmentNode){
$tempNode = $newDoc->importNode($departmentNode, true);
/*if(strcmp($departmentNode->getAttribute('name'),$department) == 0){
$sotElement->appendChild($employee);

}*/
$sotElement->appendChild($tempNode);
}

$newDoc->formatOutput = true;
$newDoc->save("test2.xml");


?>

任何帮助解释如何正确导入所有部门节点以便能够附加到它们上的帮助将不胜感激。我试过使用数组。

最佳答案

您需要导入任何节点以将其附加到另一个文档:

$departmentArray->item($i)->appendChild( $doc->importNode( $employee, true ) );

关于PHP XML DOM 未捕获异常 'DOMException',消息为 'Wrong Document Error',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5783716/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com