Powershell System.Xml.XmlElement但我使用System.Xml.XmlDocument?
我的PowerShell脚本中不断出现以下异常: 方法调用失败,因为[System.Xml.XmlElement]未 包含名为“CreateElement”的方法 但据我所知,我使用的是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
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。在设置属性和新节点之前,原始结构是什么?我为您解答了这个问题。