2011-02-04 4 views
0

Я работаю с PowerShell, чтобы манипулировать некоторыми XML, и мне удалось получить set_InnerXML («содержимое»), работающий при создании элементов, добавляемых в DOM, но мне трудно добавить строку узлов к узлу в DOM.PowerShell set_InnerXML на узле

Рабочий пример при создании элемент

Не работает пример с существующими узлами

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

Любые sugestions о том, как сделать это будет оценено.

ответ

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

Update: использование свойств 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.

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

+0

Спасибо Keith, ваш пример работает с book.Innerxml, но не работает с book.intro.Innerxml, кажется, проблема связана с тем, что книга классифицируется как узел xml, поскольку она содержит больше xml, но intro является классом как string, поскольку он ничего не содержит, есть ли у вас какие-либо идеи, если вы можете сделать intro node узлом вместо строки? – Webmonger

+0

См. Мое обновление к этому ответу. –

+0

Привет Кит, у меня все еще такая же проблема при работе над листовым узлом. В вашем примере я пытаюсь добавить контент в узел chapter1, который все еще рассматривается как строка. – Webmonger