如何在PowerShell中为XML添加子元素

时间:2013-10-08 10:34:35

标签: xml powershell

我正在尝试为此xml创建一个子XML元素:

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

我使用此PowerShell脚本:

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

我有一个错误: 方法调用失败,因为[System.String]不包含名为的方法  '的appendChild'。

1 个答案:

答案 0 :(得分:60)

如果您使用点符号来导航XML文件(例如$doc.configuration),那么Powershell会尝试巧妙地了解它返回的内容。

  • 如果目标元素为空或仅包含单个文本节点,PS将返回String
  • 如果目标元素包含除文本节点以外的子节点,则它将返回XmlElement
  • 如果存在多个目标元素,它将返回Object[],其中每个单独的数组元素再次受这些规则约束,例如:它将是StringXmlElement,具体取决于其内容。
  • 如果目标元素不存在,PS返回$null

在您的情况下,由于您想要将节点附加到文档元素,因此很容易:

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

但您可以使用$doc.SelectNodes()$doc.SelectSingleNode()浏览XML文档,并始终返回节点/节点列表。


有人可能会争论这种行为的敏感性,但事实上它使消费(结构合理的)XML非常简单 - 例如从配置文件或API响应中读取值等任务。这就是这种简单语法的目的。

它不是创建 XML的好工具,这是一项更复杂的任务。从一开始就使用DOM API方法是更好的方法。