我在PowerShell脚本中不断收到以下异常:
方法调用失败,因为[System.Xml.XmlElement]没有 包含名为CreateElement'。
的方法
但据我所知,我正在使用System.Xml.XmlDocument
?
https://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)
}
XML文件在我启动此脚本之前:
<layout>
<nodes enviroment="[uknown]">
</nodes>
</layout>
我希望结果如下:
<layout>
<nodes enviroment="develop">
<node name="Hello world" />
</nodes>
</layout>
答案 0 :(得分:8)
让我们来看看这一行:
$xmlDoc.layout.nodes.CreateElement("Node")
这是在对象CreateElement(...)
上调用方法$xmlDoc.layout.nodes
。我们可以把它分成两行:
$something = $xmlDoc.layout.nodes
$something.CreateElement("Node")
我们知道$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)
答案 1 :(得分:1)
要设置新节点,您必须使用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>