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
    Commented 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
    Commented 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
    Commented 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
    Commented Jul 14, 2014 at 15:21

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .