我正在使用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")
任何关于如何做到这一点的消息都将受到赞赏。
答案 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适配器的情况太可爱了。