powerShell system.xml.xmlelement,但我使用system.xml.xmldocument



我在我的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")

我们知道$xmlDocSystem.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>

相关内容

最新更新