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

Powershell System.Xml.XmlElement但我使用System.Xml.XmlDocument?,xml,powershell,Xml,Powershell,我的PowerShell脚本中不断出现以下异常: 方法调用失败,因为[System.Xml.XmlElement]未 包含名为“CreateElement”的方法 但据我所知,我使用的是System.Xml.XmlDocument? 我做错了什么 $file = "file.xml" $xmlDoc = [System.Xml.XmlDocument](Get-Content $file) if ($xmlDoc) { $xmlDoc.layout.nodes.SetAttribut

我的PowerShell脚本中不断出现以下异常:

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

但据我所知,我使用的是
System.Xml.XmlDocument

我做错了什么

$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)
}
XML文件在我启动此脚本之前:

<layout>
    <nodes enviroment="[uknown]">
    </nodes>
</layout>

我预计结果会是:

<layout>
    <nodes enviroment="develop">
        <node name="Hello world" />
    </nodes>
</layout>

让我们看看这一行:

$xmlDoc.layout.nodes.CreateElement("Node")
这是在对象
$xmlDoc.layout.nodes
上调用方法
CreateElement(…)
。我们可以这样把它分成两行:

$something = $xmlDoc.layout.nodes
$something.CreateElement("Node")
我们知道
$xmlDoc
System.Xml.XmlDocument
对象,但是
$something
是什么类型的对象呢?它不是指整个文档,而是指
元素。从错误消息中,我们了解到它实际上是一个
System.Xml.xmlement
对象

在下面几行中,您会出现相反的错误:在
$xmldoc
上调用
AppendChild
,而实际上您希望将其附加到特定元素

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

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

$xmlDoc.layout.nodes.AppendChild($newNode)

要设置新节点,必须使用
CreateNode()
在XML布局中声明一个新节点,并将此节点附加到父节点,如下所示:

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

if ($xmlDoc) {
    $xmlDoc.layout.nodes.SetAttribute("environment", "develop")

    #part that adds new node
    $secNode = $xmlDoc.CreateNode("element","node",$null)
    $secNode.SetAttribute("Name","Hello world") | Out-Null
    $xmlDoc.layout.nodes.AppendChild($secNode) | Out-Null
}

$xmlDoc.Save($file)
返回:

<?xml version="1.0" encoding="UTF-8"?>
<layout>
  <nodes environment="develop">
    <node Name="Hello World" />
  </nodes>
</layout>


您能否显示(编辑您的问题)原始XML的示例以及您期望的结果?您是否尝试过使用
.CreateNode
而不是
.CreateElement
?我为您更新了它。我刚刚尝试了.CreateNode,但在那一个上得到了相同的异常。我在文档中也找不到CreateNode。在设置属性和新节点之前,原始结构是什么?我为您解答了这个问题。