Thank you very much for this.
I forgot to mention that I am using xslt 2.0 and used the tokenize function to
calculate variable.
Thanks again.
Shashank
Date: Tue, 6 Apr 2010 09:37:14 +0200
From: wolfgang(_dot_)laun(_at_)gmail(_dot_)com
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: Re: [xsl] Mandatory and Missing Columns
The main difficulty here is that you haven't provided a definition of
the composition of the list of mandatory document types in
@sp_mand_doctypes. Are the separators ", " or just "," or both? The
separators must be included in the contains test since at least one
document type is a substring of another one.
So, assuming just ", " as delimiter:
<xsl:param name="sep" select="', '"/>
<xsl:template match="/">
<xsl:for-each select="//document_type[generate-id() =
generate-id(key('docType',@sp_document_type)[1])]">
<xsl:variable name="doctype" select="@sp_document_type"/>
<tr>
<xsl:variable name="events"
select="/data/event_template[contains(concat($sep,@sp_mand_doctypes,$sep),concat($sep,$doctype,$sep))]/event"/>
<xsl:variable name="required" select="count($events)"/>
<xsl:variable name="evreps"
select="count($events/document_type[(_at_)sp_document_type = $doctype])"/>
<td><xsl:value-of select="@sp_document_type"/></td>
<td><xsl:value-of select="$required"/></td>
<td><xsl:value-of select="$required - $evreps"/></td>
</tr>
</xsl:for-each>
</xsl:template>
If "," does occur or just to be on the safe side, another contains()
test has to be added, enclosing $doctype in a pair of strings:
concat(",", $doctype, ",")
If you have XSLT 2.0, you can simply use:
<xsl:variable name="events"
select="/data/event_template[tokenize(@sp_mand_doctypes,'\s*,\s*')
= $doctype]/event"/>
-W
On Mon, Apr 5, 2010 at 11:58 PM, Shashank Jain
<shashankjain(_at_)live(_dot_)com> wrote:
Hello All,
I am trying to create a table which has 3 columns like
Stock Report 6 3
Report 0 0
EPS Model 7 5
Articles 0 0
DCF Model 4 3
first column list all the sp_document_types. Second Column list the total #
of events in which the document type is mandatory and the third column list
total number of events in which sp_document_type is missing.
Here is my XML
<data business_group_id="is_er">
<event_template sp_mand_doctypes="Research Note, Prior Stock Report -
Edited / Reviewed, Stock Report">
<event complete="N" />
<event complete="N">
<document_type complete="Y" sp_document_type="Stock Report"/>
<document_type complete="Y" sp_document_type="Report"/>
</event>
<event complete="N">
<document_type complete="Y"
sp_document_type="Stock Report"/>
</event>
</event_template>
<event_template sp_mand_doctypes="EPS Model,Stock Report">
<event
complete="N" />
<event complete="N">
<document_type complete="Y" sp_document_type="EPS Model"/>
</event>
<event complete="N">
<document_type complete="Y"
sp_document_type="Stock Report"/>
</event>
</event_template>
<event_template sp_mand_doctypes="DCF Model, EPS Model">
<event
complete="N" />
<event complete="N">
<document_type complete="Y" sp_document_type="Articles"/>
<document_type complete="Y" sp_document_type="EPS Model"/>
</event>
<event complete="N">
<document_type complete="Y"
sp_document_type="Stock Report"/>
</event>
<event complete="N">
<document_type complete="Y" sp_document_type="Articles"/>
<document_type complete="Y" sp_document_type="DCF Model"/>
</event>
</event_template>
</data>
First column list all the sp_document_types
Stock Report
Report
EPS Model
Articles
DCF Model
For this I created one key function
<xsl:key name="docType" match="document_type" use="@sp_document_type"/>
and used it like this
<xsl:for-each select="//document_type[generate-id() =
generate-id(key('docType',@sp_document_type)[1])]">
<tr>
<td>
<xsl:value-of select="@sp_document_type"/>
</td>
<tr>
</xsl:for-each>
I was able to achieve the first column.
In the second column I want in how many events sp_document_type is required.
It means if we look at the first 'event_template' it has 3 mandatory
documents (Research Note, Prior Stock Report - Edited / Reviewed, Stock
Report) which should be present in the every 'event' child of
event_template. But "Stock report" is present in only 2 'events' of that
'event_template'.
Similarly second event_template has 2mandatory documents "EPS Model" and
"Stock report" and both the documents are present in one event but they were
required in all the events.
So my table will look some thing like
Stock Report 3+3+0 (since Stock report is not required in 3rd
event_template)
Report 0+0+0 (It is not required in any of the event_template)
EPS Model 0+3+4
Articles 0+0+0
DCF Model 0+0+4
In the thrid column I am trying to list total number of events in which
'sp_document_type' is missing.
It means, if we again look at the first event_template 'Stock Report' is one
of the mandatory document but it is missing in one of the event of
event_template. Similarly Stock Report is missing from the 2 of the events
of the second event_template.
Stock Report 1+2+0
Report 0+0+0
EPS Model 0+2+3
Articles 0+0+0
DCF Model 0+0+3
I will appreciate if somebody can advice me in figuring out other two
columns.
Thanks
Shashank Jain
_________________________________________________________________
The New Busy think 9 to 5 is a cute idea. Combine multiple calendars with
Hotmail.
http://www.windowslive.com/campaign/thenewbusy?tile=multicalendar&ocid=PID28326::T:WLMTAGL:ON:WL:en-US:WM_HMP:042010_5
--~------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail:
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--
--~------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail:
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--
_________________________________________________________________
The New Busy is not the too busy. Combine all your e-mail accounts with Hotmail.
http://www.windowslive.com/campaign/thenewbusy?tile=multiaccount&ocid=PID28326::T:WLMTAGL:ON:WL:en-US:WM_HMP:042010_4
--~------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--