Setting bash variables from an XML file
November 8, 2009
Here’s a quick way to set bash variables using data from an XML file. Say the xml file is called ‘writetext.xml’ and looks like this:
<br />
<?xml version="1.0"?><br />
<writetext><br />
<DATE>04/04/09</DATE><br />
<AUTHOR>Mark</AUTHOR><br />
<CROP>TRUE</CROP><br />
<FONT>/Library/Fonts/Arial.ttf</FONT><br />
<FONTSIZE>18</FONTSIZE><br />
<FIXEDFONT>/Library/Fonts/Courier New Bold.ttf</FIXEDFONT><br />
<FIXEDFONTSIZE>18</FIXEDFONTSIZE><br />
<FRAMESTEP>1</FRAMESTEP><br />
</writetext><br />
…and you want to parse it for the variables ‘DATE AUTHOR CROP FONT FONTSIZE FIXEDFONT FIXEDFONTSIZE FRAMESTEP’, setting the corresponding bash variables to the values in the XML file.
Here’s a way to do it using xmlstarlet:
<br />
VARIABLES="DATE AUTHOR CROP FONT FONTSIZE FIXEDFONT FIXEDFONTSIZE FRAMESTEP"</p>
<p>for VARIABLE in $VARIABLES<br />
do<br />
eval $VARIABLE=\"`xmlstarlet sel -t -m //writetext -v $VARIABLE writetext.xml`\"<br />
done</p>
<p>
Since this code snippet uses xmlstarlet to parse the XML, you’ll need to install it first using ‘sudo port install xmlstarlet’ on OS X or ‘apt-get install xmlstarlet’ on ubuntu/debian. (You could also potentially use ‘sed’ to do the parsing, but I’m quite happy with xmlstarlet since regular expressions make my head hurt.)