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.

squillman
  • 37,618
  • 10
  • 90
  • 145
Mikeage
  • 2,731
  • 6
  • 26
  • 37

2 Answers2

10

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)

HipCzeck
  • 246
  • 2
  • 6
  • does that maintain "pretty" xml ? – djangofan Mar 10 '10 at 17:36
  • @djangofan, No, but see this Scott Hanselman blog for an example in powershell of tidying XML. http://www.hanselman.com/blog/AnXmlTidyInPowerShellOrFormattingXmlWithIndentingWithPowerShell.aspx – HipCzeck Jul 14 '14 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
netlinxman
  • 477
  • 1
  • 5
  • 10
  • 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 '09 at 03: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 '14 at 15:21