cabrao
October 19, 2010, 5:27am
1
Hello all,
Given the following extract from a xml file with multiple <JOB> .... </JOB> entries
<JOB
APPLICATION="APP"
APR="0"
AUG="0"
AUTHOR="AUT"
AUTOARCH="0"
CMDLINE="/tmp/test1 %%var"
CONFIRM="1"
CREATION_DATE="20100430"
CREATION_TIME="130739"
CREATION_USER="user"
CRITICAL="0"
CYCLIC="0"
CYCLIC_TYPE="Interval"
DAYS_AND_OR="OR"
DEC="0"
DESCRIPTION="This is a test for job1"
FEB="0"
IND_CYCLIC="START"
INTERVAL="00000M"
JAN="0"
JOBNAME="TESTJOB"
JUL="0"
JUN="0"
MAR="0"
MAXDAYS="0"
MAXRERUN="0"
MAXRUNS="0"
MAXWAIT="20"
MAY="0"
MEMNAME="JOB1"
MULTY_AGENT="N"
NODEID="SERVER1"
NOV="0"
OCT="0"
OWNER="root"
RETRO="0"
SEP="0"
SHIFT="IGNOREJOB"
SHIFTNUM="+00"
SYSDB="0"
TAG_RELATIONSHIP="OR"
TASKTYPE="Command"
USE_INSTREAM_JCL="N"
>
<QUANTITATIVE NAME="DRIVE1" QUANT="1"/>
<OUTCOND NAME="JOB1-OK" ODATE="ODAT" SIGN="ADD"/>
<AUTOEDIT EXP="%%SYSTEM=server1"/>
</JOB>
<JOB>
...........
JOBNAME="TESTJOB2"
>
.......
<INCOND AND_OR="AND" NAME="JOB1-KO" ODATE="ODAT" />
</JOB>
Can someone help me having the following output if I grep for exemple the keywork JOB1. Note: this keywork whill only be grepped in lines containing the tag INCOND and OUTCOND and then print the following output:
TESTJOB OUTCOND JOB1-OK
TESTJOB2 INCOND AND JOB1-KO
Thanks in advance for the attention
Regards,
Assuming the following simplified XML document (example1.xml) where I have removed most of the attributes to make the things easier to follow:
<JOBS>
<JOB INTERVAL="00000M" JAN="0" JOBNAME="TESTJOB" JUL="0">
<QUANTITATIVE NAME="DRIVE1" QUANT="1"/>
<OUTCOND NAME="JOB1-OK" ODATE="ODAT" SIGN="ADD"/>
<AUTOEDIT EXP="%%SYSTEM=server1"/>
</JOB>
<JOB INTERVAL="00000G" JAN="0" JOBNAME="TESTJOB2" JUL="0">
<QUANTITATIVE NAME="DRIVE1" QUANT="1"/>
<INCOND AND_OR="AND" NAME="JOB1-KO" ODATE="ODAT" />
<AUTOEDIT EXP="%%SYSTEM=server1"/>
</JOB>
</JOBS>
the following XSLT 1.0 stylesheet (example1.xsl) will output what you specified
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:param name="search"></xsl:param>
<xsl:output method="text"/>
<xsl:template match="/">
<xsl:apply-templates select="//OUTCOND" />
<xsl:apply-templates select="//INCOND" />
</xsl:template>
<xsl:template match="OUTCOND">
<xsl:if test='contains(@NAME, $search)'>
<xsl:value-of select="../@JOBNAME" />
<xsl:text> OUTCOND </xsl:text>
<xsl:value-of select="@NAME" />
<xsl:text>
</xsl:text>
</xsl:if>
</xsl:template>
<xsl:template match="INCOND">
<xsl:if test='contains(@NAME, $search)'>
<xsl:value-of select="../@JOBNAME" />
<xsl:text> INCOND </xsl:text>
<xsl:value-of select="@AND_OR" />
<xsl:text> </xsl:text>
<xsl:value-of select="@NAME" />
<xsl:text>
</xsl:text>
</xsl:if>
</xsl:template>
</xsl;stylesheet>
Here is how you would perform the transformation using xsltproc where the search term is JOB1
$ xsltproc -param search "'JOB1'" example.xsl example.xml
TESTJOB OUTCOND JOB1-OK
TESTJOB2 INCOND AND JOB1-KO
$
1 Like
cabrao
October 20, 2010, 5:16am
3
Perfect!
I didn't know xsltproc, thanks for your great help and time fpmurphy!
---------- Post updated 20th Oct 2010 at 11:16 AM ---------- Previous update was 19th Oct 2010 at 08:03 PM ----------
EDIT:
xsltproc is very powerfull and in order to improve my results I added the following code in your example.xsl :
<xsl:template match="/">
<xsl:apply-templates select="//QUANTITATIVE" />
</xsl:template>
<xsl:template match="QUANTITATIVE">
<xsl:if test='contains(@NAME, $search)'>
<xsl:value-of select="../@JOBNAME" />
<xsl:text> </xsl:text>
<xsl:value-of select="@NAME" />
<xsl:text> </xsl:text>
<xsl:value-of select="@QUANT" />
<xsl:text> </xsl:text>
<xsl:text>
</xsl:text>
</xsl:if>
</xsl:template>
This new code is working fine, the only thing is that when I do a command xsltproc -param search "'KEYWORD'" if KEYWORD exists in (OUTCOND or INCOND) and in QUANTITATIVE template it will print all matching results at the same time.
Is there a way to pass a parameter via xsltproc command line or something in order to print only (OUTCOND or INCOND) or QUANTITATIVE with just one example.xsl file ?
A solution would be to create multiples .xsl files but I would rather prefer having just one. Any idea fpmurphy or someone else ?
Thanks for the attention!