xsl-list
[Top] [All Lists]

RE: [xsl] Total Missing documents for each Event‏

2010-04-09 10:17:52


Thanks David for that.

Also I tried calculating the list of sp_document_type which are not in the 
sp_mand_doctypes.

 

So my table should look like

For 1st Event list of situational documents will be [--] and count is 0

For 2nd Event list of situational documents will be [--] and count is 0

For 3rd Event list of situational documents will be [Analyst] and count is 1.

 

I was able to achieve what I want but was getting comma [,] at the end of every 
situational doc, I did that to tokenize the document array and to count them.


Here my XML again


<data>
<event_template sp_mand_doctypes="PSC Minutes, Internal Approval, Rationale, 
Trade Instructions, IPS, Final Client Models">
<event>
    <document_type sp_document_type="Final Client Models"/>
</event>
<event>
    <document_type sp_document_type="Final Client Models"/>
    <document_type sp_document_type="Rationale"/>
</event>
<event>
    <document_type sp_document_type="Analyst"/>
</event>
<event_template>
</data>
 

This is the XSLT I am using.

<xsl:for-each select="event">
<xsl:call-template name="ExistSituational"/>
</xsl:for-each>

<xsl:template name="ExistSituational">
    <xsl:param name="counter" />
    <xsl:param name="docsType" />
    <xsl:param name="mandatoryDocs" select="parent::node()/@sp_mand_doctypes"/>
    <xsl:param name="strArray" select="tokenize($mandatoryDocs,',')"/>
    <xsl:variable name="totalCount" select="count($strArray)"/>
    <xsl:variable name="existingDoc">
        <xsl:for-each select="document_type">
            <xsl:call-template name="matchDocs">
                <xsl:with-param name="counter" select="$totalCount"/>
                <xsl:with-param name="docsType" select="@sp_document_type"/>
                <xsl:with-param name="strArray" select="$strArray"/>
            </xsl:call-template>
        </xsl:for-each>
    </xsl:variable>  
        <xsl:for-each select="document_type">
            <xsl:call-template name="SituationalDocs">              
                <xsl:with-param name="docsType" select="@sp_document_type"/>
                <xsl:with-param name="existingDoc" select="$existingDoc"/>
            </xsl:call-template>
        </xsl:for-each>
</xsl:template>

<xsl:template name="SituationalDocs">
    <xsl:param name="docsType"/>
    <xsl:param name="existingDoc"/>
    <xsl:if test="not(contains($existingDoc, $docsType))">
        <xsl:value-of select="$docsType" />,
    </xsl:if>
</xsl:template>

<xsl:template name="matchDocs">
    <xsl:param name="counter"/>
    <xsl:param name="docsType"/>
    <xsl:param name="strArray"/>
    <xsl:choose>
        <xsl:when test="normalize-space($strArray[$counter])=$docsType">
            <xsl:value-of select="$docsType"/>,
        </xsl:when>
    </xsl:choose>
    <xsl:if test="$counter> 0">
        <xsl:call-template name="matchDocs">
            <xsl:with-param name="counter" select="$counter - 1"/>
            <xsl:with-param name="docsType" select="$docsType"/>
            <xsl:with-param name="strArray" select="$strArray"/>
        </xsl:call-template>
    </xsl:if>
</xsl:template>


<xsl:template name="NumMandExisting">
      <xsl:variable name="mandatoryDocs" 
select="parent::node()/@sp_mand_doctypes"/>
      <xsl:variable name="strArray" select="tokenize($mandatoryDocs,',')"/>
      <xsl:variable name="totalCount" select="count($strArray)"/>
      <xsl:variable name="existingDocs">
            <xsl:for-each select="document_type">
                  <xsl:call-template name="matchDocs">
                        <xsl:with-param name="counter" select="$totalCount"/>
                        <xsl:with-param name="docsType" 
select="@sp_document_type"/>
                        <xsl:with-param name="strArray" select="$strArray"/>
                  </xsl:call-template>
            </xsl:for-each>
      </xsl:variable>
      <xsl:variable name="docsArray" 
select="tokenize(normalize-space($existingDocs),',')"/>
      <xsl:choose>
            <xsl:when test="(count($docsArray) - 1) &lt; 0">
                  <xsl:sequence select="0"/>
            </xsl:when>
            <xsl:otherwise>
                  <xsl:sequence select="count($docsArray) - 1"/>
            </xsl:otherwise>
      </xsl:choose>
</xsl:template>

I tried the way you explained to calculate Missing documents in the previous 
post, but no luck.
Thanks again,

Shashank
----------------------------------------
Date: Fri, 9 Apr 2010 01:33:49 +0100
From: davidc(_at_)nag(_dot_)co(_dot_)uk
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
CC: shashankjain(_at_)live(_dot_)com
Subject: Re: [xsl] Total Missing documents for each Event‏

On 08/04/2010 19:27, Shashank Jain wrote:

Hello All,

I am trying to create the list of missing documents and their count for each 
event.
















So my table should look like

For 1st Event list of missing documents will be [PSC Minutes, Internal 
Approval, Rationale, Trade Instructions, IPS] and count is 5
For 2nd Event list of missing documents will be [PSC Minutes, Internal 
Approval, Trade Instructions, IPS] and count is 4
For 3rd Event list of missing documents will be [PSC Minutes, Internal 
Approval, Rationale, Trade Instructions, IPS, Final Client Models] and count 
is 6. "Analyst" is not the mandatory document as it is not present in the 
sp_mand_doctype list.

I am using this following code.








....



With this I am able to right number of Missing Docs f

It's a syntax error to have an xsl:variable at this point, so i wouldn't
have expected this to run at all?
I think you just want


xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>




select="tokenize(@sp_mand_doctypes,'\s*,\s*')"/>

For event 
 list is 

separator=","/>
 count 

select="count($x[not(.=current()/document_type/@sp_document_type)])"/>






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

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