节点上的PowerShell set_InnerXML

时间:2011-02-04 17:44:49

标签: xml powershell

我正在使用PowerShell来操作一些XML,并且我设法在创建添加到DOM的元素时使set_InnerXML(“内容”)正常工作但我在向一个节点添加一串节点时遇到了困难DOM中的节点。

创建元素时的工作示例

$xml = New-Object XML
$xml.Load(".\file.xml")
$newnode= $xml.CreateElement("newelament")
$newnode.set_InnerXML("<stringnode>content</stringnode>")
$root = $xml.get_DocumentElement()
$result = $root.InsertAfter($newnode, $root.get_FirstChild())
$xml.Save(".\file.xml")

不使用现有节点的示例

$xml = New-Object XML
$xml.Load(".\file.xml")
$xml.node1.node2.set_InnerXML("<stringnode>content</stringnode>")
$xml.Save(".\file.xml")

任何关于如何做到这一点的消息都将受到赞赏。

1 个答案:

答案 0 :(得分:0)

PS> $xml = [xml](Get-Content ~\foo.xml)
PS> $xml | Format-Xml
<root>
  <book>
    <chapter1 />
    <chapter2 />
  </book>
</root>

更新:使用InnerXml / InnerText属性修改节点的内容但似乎没有修改DOM以将新元素添加为XmlNodes。要创建可以使用DOM操作的新节点,请使用适当的XmlDocument Create方法,例如:

$book = $xml.root.book
$xml.root.book.RemoveAll()
$book -eq $xml.root.book

$intro = $xml.CreateElement("Intro")
$book.AppendChild($intro) > $null

$para = $xml.CreateElement("Para")
$intro.AppendChild($para) > $null
$xml | Format-Xml

注意:Format-Xml是来自PowerShell Community Extensions的cmdlet。

另请注意,我捕获$book xml节点,因为在您执行RemoveAll()之后,PowerShell不再将book视为XmlNode,而是将其视为字符串。看起来像Xml适配器的情况太可爱了。