Skip to content

Editing XML Documents with PowerShell

XML (eXtensible Markup Language) is a widely-used format for storing and transporting data, particularly in web services and configuration files. When working with XML documents, efficient editing is often necessary, whether it’s adding new elements, removing existing ones, or modifying values. PowerShell, with its powerful scripting capabilities, offers a convenient way to manipulate XML documents programmatically. In this guide, we’ll explore how to edit XML documents using PowerShell, covering the addition and removal of elements, and provide a full code example with output.

Importing the XML Document

First, let’s load an XML document into PowerShell. You can do this using the Get-Content cmdlet to read the XML file and then parse it using the xml type accelerator. Here’s how you can load an XML document named “example.xml”:

example.xml

<people>
    <person>
        <name>Alice</name>
        <age>25</age>
    </person>
    <person>
        <name>Bob</name>
        <age>35</age>
    </person>
</people>

$xmlPath = "C:\path\to\example.xml"
$xmlContent = Get-Content -Path $xmlPath
$xml = [xml]$xmlContent

Adding Elements

Adding elements to an XML document in PowerShell involves creating new XML nodes and appending them to the appropriate parent nodes. Here’s an example of adding a new <person> element with <name> and <age> child elements:

$newPerson = $xml.CreateElement("person")

$name = $xml.CreateElement("name")
$name.InnerText = "Script Wizard"

$age = $xml.CreateElement("age")
$age.InnerText = "150"

$newPerson.AppendChild($name)
$newPerson.AppendChild($age)

$xml.DocumentElement.AppendChild($newPerson)

Removing Elements

Removing elements from an XML document in PowerShell is straightforward. You can use the RemoveChild() method to remove a specific node. Here’s an example of removing a <person> element:

$personToRemove = $xml.SelectSingleNode("//person[name='Script Wizard']")
if ($personToRemove -ne $null) {
    $xml.DocumentElement.RemoveChild($personToRemove)
}

Saving Changes

Once you’ve made the desired changes to the XML document, you can save the modified document back to a file using the Save() method. Here’s how you can save the changes:

$xml.Save("C:\path\to\modified.xml")

Full Code Example

Here’s a full code example combining the steps mentioned above:

# Import XML Document
$xmlPath = "C:\path\to\example.xml"
$xmlContent = Get-Content -Path $xmlPath
$xml = [xml]$xmlContent

# Adding a new person
$newPerson = $xml.CreateElement("person")

$name = $xml.CreateElement("name")
$name.InnerText = "Script Wizard"

$age = $xml.CreateElement("age")
$age.InnerText = "150"

$newPerson.AppendChild($name)
$newPerson.AppendChild($age)

$xml.DocumentElement.AppendChild($newPerson)

# Removing a person
$personToRemove = $xml.SelectSingleNode("//person[name='Script Wizard']")
if ($personToRemove -ne $null) {
    $xml.DocumentElement.RemoveChild($personToRemove)
}

# Saving changes
$xml.Save("C:\path\to\modified.xml")

In this guide, we’ve covered the basics of editing XML documents using PowerShell, including adding and removing elements. With these techniques, you can efficiently manipulate XML data to suit your requirements.


Recommended Reading: How to Parse XML Documents With PowerShell

Published inPowerShell
© 2024 ScriptWizards.net - Powered by Coffee & Magic