У меня есть следующий XML
дерева:Powershell: добавить дочерний узел в XML
<company>
<employees>
<employee name="Dwight" id="e1000" department="sales">
</employee>
<employee name="Toby" id="e1001" department="hr">
</employee>
<employee name="Jim" id="e1002" department="sales">
</employee>
</employees>
</company>
И я пытаюсь добавить новый сотрудник по имени Пэм, ID = «e1003» при кафедре = «приема».
Это то, что я пытался до сих пор:
$fileName = "C:\code\employees.xml";
$xmlDoc = [System.Xml.XmlDocument](Get-Content $fileName);
$newXmlEmployee = $xmlDoc.employees.AppendChild($xmlDoc.CreateElement("employee"));
$newXmlEmployee.SetAttribute("name","Pam");
$newXmlEmployee.SetAttribute("id","e1003");
$newXmlEmployee.SetAttribute("department","reception");
$xmlDoc.Save($fileName);
Однако я поздоровался со следующими сообщениями об ошибках:
You cannot call a method on a null-valued expression. At C:\code\testing.ps1:6 char:48 + $newXmlEmployee = $xmlDoc.employees.AppendChild <<<< ($xmlDoc.CreateElement("employee")); + CategoryInfo : InvalidOperation: (AppendChild:String) [], RuntimeException + FullyQualifiedErrorId : InvokeMethodOnNull
You cannot call a method on a null-valued expression. At C:\code\testing.ps1:7 char:29 + $newXmlEmployee.SetAttribute <<<< ("name","Pam"); + CategoryInfo : InvalidOperation: (SetAttribute:String) [], RuntimeException + FullyQualifiedErrorId : InvokeMethodOnNull
You cannot call a method on a null-valued expression. At C:\code\testing.ps1:8 char:29 + $newXmlEmployee.SetAttribute <<<< ("id","e1003"); + CategoryInfo : InvalidOperation: (SetAttribute:String) [], RuntimeException + FullyQualifiedErrorId : InvokeMethodOnNull
You cannot call a method on a null-valued expression. At C:\code\testing.ps1:9 char:29 + $newXmlEmployee.SetAttribute <<<< ("department","reception"); + CategoryInfo : InvalidOperation: (SetAttribute:String) [], RuntimeException + FullyQualifiedErrorId : InvokeMethodOnNull
Как бы решить эту проблему?
Благодаря @Martin! Теперь мне нужно добавить дочерний узел под узлом employee, я попробовал: $ newXmlEmployee = $ xmlDoc.company.employees.employee.AppendChild ($ xmlDoc.CreateElement («адрес»)); но я закончил с этой ошибкой: Ошибка вызова метода, потому что [System.Object []] не содержит метода с именем «AppendChild» - вложенные узлы обрабатываются по-разному? – pinkie
Это потому, что есть несколько узлов-сотрудников - вам нужно выбрать тот, который вы хотите создать. Примите этот ответ и задайте другой вопрос, если вы не получите его на работу. –