我正在尝试为此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'。
答案 0 :(得分:60)
如果您使用点符号来导航XML文件(例如$doc.configuration
),那么Powershell会尝试巧妙地了解它返回的内容。
String
。XmlElement
。Object[]
,其中每个单独的数组元素再次受这些规则约束,例如:它将是String
或XmlElement
,具体取决于其内容。$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方法是更好的方法。