xsl-list
[Top] [All Lists]

RE: [xsl] Mandatory and Missing Columns

2010-04-06 18:03:55

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>
--~--

<Prev in Thread] Current Thread [Next in Thread>