5

I have a few applications which store their config files in XML format. For a regular application, using a text based config, I could update a value easily enough by using perl, or sed, or awk, or any one of a million tools. I'm looking for something similar for XML, which will allow me to easily and reliably perform operations like: update a value, add a node, or remove one.

Regular text parsing would seem to be too risky, as I have no real guarantees about the physical file format.

2 Answers 2

11

XML parsing in MS Powershell is easier than any parsing mechanism I've seen in any other language or environment I've personally encountered.

Given some XML file (test.xml):

<root>
  <one>I like applesauce</one>
  <two>You sure bet I do!</two>
</root>

You can easily access, modify and append nodes, values and attributes of the XML file from inside Powershell.

# load XML file into local variable and cast as XML type.
$doc = [xml](Get-Content ./test.xml)

$doc.root.one                                   #echoes "I like applesauce"
$doc.root.one = "Who doesn't like applesauce?"  #replace inner text of <one> node

# create new node...
$newNode = $doc.CreateElement("three")
$newNode.set_InnerText("And don't you forget it!")

# ...and position it in the hierarchy
$doc.root.AppendChild($newNode)

# write results to disk
$doc.save("./testNew.xml")

Resulting XML in file testNew.xml:

<root>
  <one>Who doesn't like applesauce?</one>
  <two>You sure bet I do!</two>
  <three>And don't you forget it!</three>
</root>

Incredibly easy! Enjoy.

Powershell is Microsoft's new shell that ships with Windows Server 2008 and Windows 7 and is a free download for XP/Vista/Server 2003 (perhaps others).

Some useful links:
Generating XML from other sources
Adding elements to XML:
Sample 1, MSDN PowerShell blog
Sample 2, PC-Pro(UK)

2
  • does that maintain "pretty" xml ?
    – djangofan
    Mar 10, 2010 at 17:36
  • @djangofan, No, but see this Scott Hanselman blog for an example in powershell of tidying XML. hanselman.com/blog/…
    – HipCzeck
    Jul 14, 2014 at 15:18
0

If I understand the question properly, you are looking for a different configuration file storage format that is akin to XML. One of the best strengths of XML though is the fact it gives you a structured data format. If you violate the DTD or "template" you have a poorly formed XML config file. In the past for some of my own development efforts, scripts, programs and apps, I had used INI formatted files. While INI's are easily parsed, and can support similar add, delete, updates, I favor XML b/c it is:

  1. widely used
  2. Easily Parsed with Perl's XML::LibXML
  3. Offers greater flexibility than INI files
  4. Best solution to persist rigid formats and structs from programs
2
  • I guess I didn't quite understand the question properly. Now I do; I prefer Perl to PowerShell for portability reasons to other platforms.
    – netlinxman
    Jun 17, 2009 at 3:48
  • 1
    I would not have recommended powershell if he had expressed a need for anything other than XML manipulation from the Windows Command Line. There are a number of tools that can manipulate XML, many more portable, but PowerShell is by far the most efficient and compact that I have experienced in windows or otherwise.
    – HipCzeck
    Jul 14, 2014 at 15:21

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.