tags:

views:

127

answers:

2

I'm having trouble adding an XmlElement to a non-root element in PowerShell.

Basically, given this xml:

<clubs>
        <club name="boca" position="1">
                <field>bombonera</field>
                <field>bombonerita</field>
        </club>
        <club name="racing" position="19">
                <field>cilindro</field>
        </club>
</clubs>

I want to achieve this

<clubs> 
        <club name="boca" position="1"> 
                <field>bombonera</field> 
                <field>bombonerita</field> 
        </club> 
        <club name="racing" position="19"> 
                <field>cilindro</field> 
        </club> 
        <club name="barracas" />
</clubs>

I create an element,

$new = $clubs.CreateElement("barracas")

When I try to add this element to a non-root node i.e.

$clubs.clubs.club += $new

I get

Cannot set "club" because only strings can be used as values to set XmlNode properties.

What am I missing? Thanks in advance.

+1  A: 

Try using the AppendChild method on the appropriate element. There are alternatives to AppendChild as described in Create New Nodes in the DOM which allow you more control of the location in the DOM tree.

$club = $xml.CreateElement('club')
$club.SetAttribute('name','barracas')
$xml.clubs.AppendChild($club)
Martin Hollingsworth
A: 
$doc = [xml]
@"<clubs>
        <club name="boca" position="1">
                <field>bombonera</field>
                <field>bombonerita</field>
        </club>
        <club name="racing" position="19">
                <field>cilindro</field>
        </club>
</clubs>
"@

$new = $doc.CreateElement("club")
$new.SetAttribute("name", "barracas")

$doc.clubs.AppendChild($new)

$doc.OuterXml
xcud