|
Subject: Re: [xsl] Mandatory and Missing Columns From: Wolfgang Laun <wolfgang.laun@xxxxxxxxx> Date: Tue, 6 Apr 2010 09:37:14 +0200 |
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),con
cat($sep,$doctype,$sep))]/event"/>
<xsl:variable name="required" select="count($events)"/>
<xsl:variable name="evreps"
select="count($events/document_type[@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@xxxxxxxx> 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=PID283
26::T:WLMTAGL:ON:WL:en-US:WM_HMP:042010_5
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| [xsl] Mandatory and Missing Columns, Shashank Jain | Thread | RE: [xsl] Mandatory and Missing Col, Shashank Jain |
| Re: [xsl] I'm trying to get the las, Kevin Grover | Date | RE: [xsl] Mandatory and Missing Col, Shashank Jain |
| Month |