Подтвердить что ты не робот

Как добавить дочерний элемент для XML в PowerShell

Я пытаюсь создать дочерний элемент XML для этого xml:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
</configuration>

Я использую этот PowerShell script:

[xml] $doc = Get-Content($filePath)
$child = $doc.CreateElement("newElement")
$doc.configuration.AppendChild($child)

У меня есть ошибка: Ошибка вызова метода, потому что [System.String] не содержит метода с именем  'AppendChild'.

4b9b3361

Ответ 1

Если вы используете точечную нотацию для перемещения по XML файлу (например, $doc.configuration), Powershell пытается быть умным в отношении того, что он возвращает.

  • Если целевой элемент пуст или содержит только один текст node, PS вернет String.
  • Если целевой элемент содержит дочерние узлы, отличные от текстовых узлов, он вернет XmlElement.
  • Если существует несколько целевых элементов, они возвращают Object[], где каждый отдельный элемент массива снова подчиняется этим правилам, например. он будет либо String, либо XmlElement в зависимости от его содержимого.
  • Если целевой элемент не существует, PS возвращает $null.

В вашем случае это легко, поскольку вы хотите добавить узлы к элементу документа:

$doc = New-Object System.Xml.XmlDocument
$doc.Load($filePath)
$child = $doc.CreateElement("newElement")
$doc.DocumentElement.AppendChild($child)

но вы можете использовать $doc.SelectNodes() или $doc.SelectSingleNode() для навигации по XML-документу и всегда иметь список node/node.