Powershell System.Xml.XmlElement但我使用System.Xml.XmlDocument?

Stu*_*urf 3 xml powershell

我在PowerShell脚本中不断收到以下异常:

方法调用失败,因为[System.Xml.XmlElement]不包含名为CreateElement'的方法.

但据我所知,我正在使用System.Xml.XmlDocumenthttps://msdn.microsoft.com/en-us/library/fw1ys7w6(v=vs.110).aspx

我究竟做错了什么?

$file = "file.xml"
$xmlDoc = [System.Xml.XmlDocument](Get-Content $file)

if ($xmlDoc) {
    $xmlDoc.layout.nodes.SetAttribute("environment", "develop"); #this works

    $newNode = $xmlDoc.layout.nodes.CreateElement("Node")
    $newNode.SetAttribute("name", "Hello world")

    $xmlDoc.AppendChild($newNode)

    $xmlDoc.Save($systemConfigFile)
}
Run Code Online (Sandbox Code Playgroud)

XML文件在我启动此脚本之前:

<layout>
    <nodes enviroment="[uknown]">
    </nodes>
</layout>
Run Code Online (Sandbox Code Playgroud)

我期待结果te成为:

<layout>
    <nodes enviroment="develop">
        <node name="Hello world" />
    </nodes>
</layout>
Run Code Online (Sandbox Code Playgroud)

IMS*_*SoP 8

我们来看看这一行:

$xmlDoc.layout.nodes.CreateElement("Node")
Run Code Online (Sandbox Code Playgroud)

这是CreateElement(...)在对象上调用方法$xmlDoc.layout.nodes.我们可以把它分成两行,如下所示:

$something = $xmlDoc.layout.nodes
$something.CreateElement("Node")
Run Code Online (Sandbox Code Playgroud)

我们知道这$xmlDoc是一个System.Xml.XmlDocument对象,但是什么类型的对象是$something什么?它不是指整个文档,而是指<nodes>元素.从错误消息中,我们了解到它实际上是一个System.Xml.XmlElement对象.

几行了,你做相反的错误:你叫AppendChild$xmldoc的时候,居然要其追加到特定元素.

所以,首先我们需要$xmlDoc用来创建新元素; 然后我们可以使用$xmlDoc.layout.nodes(我之前称之为$something)来说明我们想要放置新元素的位置:

$newNode = $xmlDoc.CreateElement("Node")
$newNode.SetAttribute("name", "Hello world")

$xmlDoc.layout.nodes.AppendChild($newNode)
Run Code Online (Sandbox Code Playgroud)