我在我的powershell脚本中不断获得以下异常:
方法调用失败,因为[System.xml.xmlelement]没有 包含一个名为Createlement'的方法'
,但据我所知,我正在使用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>
让我们看一下这一行:
$xmlDoc.layout.nodes.CreateElement("Node")
这是在对象$xmlDoc.layout.nodes
上调用方法CreateElement(...)
。我们可以将其分成两行:
$something = $xmlDoc.layout.nodes
$something.CreateElement("Node")
我们知道$xmlDoc
是System.Xml.XmlDocument
对象,但是哪种类型的对象是$something
?它没有参考整个文档,而是指<nodes>
元素。从错误消息中,我们了解到它实际上是一个System.Xml.XmlElement
对象。
下几行,您犯了相反的错误:您在$xmldoc
上调用AppendChild
,实际上您想将其附加到特定元素。
因此,首先,我们需要将$xmlDoc
用于 create 新元素;然后,我们可以使用$xmlDoc.layout.nodes
(我之前称为$something
)来说我们要放置新元素的位置:
$newNode = $xmlDoc.CreateElement("Node")
$newNode.SetAttribute("name", "Hello world")
$xmlDoc.layout.nodes.AppendChild($newNode)
要设置一个新节点,您必须在XML布局中使用CreateNode()
声明一个新节点,然后将此节点附加到类似的父节点:
$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>