PowerShell set_InnerXML на узле - PullRequest
       13

PowerShell set_InnerXML на узле

1 голос
/ 04 февраля 2011

Я работаю с PowerShell, чтобы манипулировать некоторым XML, и мне удалось заставить set_InnerXML («содержимое») работать при создании элементов, которые добавляются в DOM, но у меня возникают трудности с добавлением строки узлов в узел в 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 голосов
/ 04 февраля 2011
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 .

Также обратите внимание, что я перехватываю узел $book xml, потому что после выполнения на нем RemoveAll() PowerShell больше не рассматривает book XmlNode, а вместо этого строку. Похоже на то, что адаптер Xml слишком хорош для его блага.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...