我一直在尝试为我的学校制作一个XML文档,如果目录中不存在,则将创建该文档,如果存在,则将附加日志类型的文件。但是,当尝试将新节点附加到文件中时,我收到错误:"此文档已具有'DocumentElement'节点。
这是我尝试导入和附加节点
if (Test-Path "$destinationlog.xml" -PathType Leaf) {
[xml]$xml = Get-Content("$destinationlog.xml")
$element = $xml.ImportNode($doc.LastChild, $true)
$xml.AppendChild($element)
}
这就是我形成节点的地方
[xml]$doc = New-Object System.Xml.XmlDocument #Sukuriam naują XML dokumentą
$root = $doc.CreateNode("element","Backups", $null)
$root.InnerText = (Get-Date).ToString()
foreach ($file in $failai) {
$failasNode = $doc.CreateNode("element","Failas",$null)
$pavadinimas = $doc.CreateElement("Saltinis")
$data = $doc.CreateElement("Data")
$takas = $doc.CreateElement("Vieta")
$busena = $doc.CreateElement("Busena")
#some other stuff, that puts info in the elements
$failasNode.AppendChild($pavadinimas)
$failasNode.AppendChild($busena)
$failasNode.AppendChild($data)
$failasNode.AppendChild($takas)
$root.AppendChild($failasNode)
}
$doc.AppendChild($root)
该行
$xml.AppendChild($element)
返回一条错误消息:
此文档已有一个"文档元素"节点。
$xml.AppendChild()
会将元素直接附加到文档根目录下,即作为根节点。如果文档已经有一个根节点,则该操作自然会失败,因为 XML 文档不能有多个根节点。
<?xml version="1.0" encoding="utf-8"?>
<rootnode>
<!-- stuff -->
</rootnode>
<newnode>foo</newnode><!-- ← invalid! -->
若要解决此问题,请选择要在其下附加导入节点的节点,并在该节点上调用AppendChild()
:
$xml.SelectSingleNode('/path/to/node').AppendChild(...)
要将导入的节点直接附加到文档根节点下,请将上述内容简化为:
$xml.DocumentElement.AppendChild(...)