XML fájlok szerkesztése parancssorból

Egyre több program tárolja az adatokat XML formátumban, ami kezelése nem egyszerű a hagyományos parancssori eszközökkel (grep, sed, és társai). Az XML formátum kezelésére viszont léteznek már újabb eszközök, mint például az XmlStarlet. Ez gyakorlatilag egy parancssori XML szerkesztő tool, melynek segítségével könnyedén nyerhetünk ki, vagy adhatunk, módosíthatunk adatokat az XML formátumú fájlokban.

A használata során nem árt képben lenni az XPATH fogalmával, és formátumával. Ehhez jó kiindulási alap lehet az W3Schools leírása. A munka során jó szolgálatot tehetnek még az online XPATH teszterek, generátorok.

Egy sok xml-t módosító (alap) script valahogy így néz ki a gyakorlatban:

<br />
#!/bin/sh<br />
WORKSPACE=/cygdrive/t/work/</p>
<p>for x in `ls -d ${WORKSPACE}/*/`;<br />
do<br />
  PROJ_FILE=${x}build.xml<br />
  if [ -f ${PROJ_FILE} ]<br />
    then<br />
    echo Processing build file: ${PROJ_FILE}<br />
    xmlstarlet ed -O -P -a &quot;/project&quot; -t attr -n default -v &quot;rebuild_release&quot; ${PROJ_FILE}<br />
  fi<br />
done<br />

A futtatás során a megadott könyvtár alkönyvtáraiban található build.xml fájlok tartalma az alábbi képpen módosul:

Eredeti tartalom:

<br />
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;<br />
&lt;project name=&quot;ac&quot;&gt;<br />
	&lt;import file=&quot;../build/common.xml&quot;/&gt;<br />

Tartalom a módosítás után:

<br />
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;<br />
&lt;project name=&quot;ac&quot; default=&quot;rebuild_release&quot;&gt;<br />
	&lt;import file=&quot;../build/common.xml&quot;/&gt;<br />

A példa nem vizsgálja, hogy az XML tartalmaz e már default attribútumot, de ezt igény esetén egy újabb xmlstarlet query-vel és egy if-el könnyedén ellenőrizhetnénk. Jelen működés alapján, ha kétszer futtatnák le a fenti kódot, akkor az xml-ekben 2x kerülne beszúrásra a default tag.

 

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.