Good Day. I'm a beginner in XSLT. I have requirement to generate sequence number for every row written into the text file.
I have 2 inner for-Loops and one outer for-loop. For each specific condition of the outer for-loop control passes to the inner 2 for-loops. First inner for-loop writes a couple of rows to the text file followed by second inner for-loop.
Say for instance first inner for-loop writes 3 rows into the text file and then second inner writes 2 rows to the text file, then output should be like
SeqNo:
1
2
3
4
5
Below is my XML:
<Envelope>
<Body>
<Get_Compensation_Eligibility_Rules_Response version="v23.2">
<Request_References>
<Compensation_Eligibility_Rule_Reference Descriptor="AAFT Workday Management">
<ID type="WID">1a90d104082a101c6a5b8adb783c0891</ID>
<ID type="Condition_Rule_ID">CONDITION_RULE-6-999</ID>
</Compensation_Eligibility_Rule_Reference>
</Request_References>
<Response_Filter>
<As_Of_Effective_Date>2015-08-04-07:00</As_Of_Effective_Date>
<As_Of_Entry_DateTime>2015-08-04T23:51:56.000-07:00</As_Of_Entry_DateTime>
<Page>1</Page>
<Count>100</Count>
</Response_Filter>
<Response_Results>
<Total_Results>1</Total_Results>
<Total_Pages>1</Total_Pages>
<Page_Results>1</Page_Results>
<Page>1</Page>
</Response_Results>
<Response_Data>
<Compensation_Eligibility_Rule>
<Compensation_Eligibility_Rule_Data>
<Effective_Date>2015-08-04-07:00</Effective_Date>
<Rule_Data>
<Condition_Rule_ID>CONDITION_RULE-6-999</Condition_Rule_ID>
<Rule_Description>AAFT Workday Management</Rule_Description>
<Condition_Item_Data>
<Order>a</Order>
<And_Or_Operator_Reference Descriptor="And">
<ID type="WID">da4e1c34446c11de98360015c5e6daf6</ID>
<ID type="And_Or_Operator_Name">And</ID>
</And_Or_Operator_Reference>
<Relational_Operator_Reference
Descriptor="any in the selection list">
<ID type="WID">d5227566446c11de98360015c5e6daf6</ID>
<ID type="Relational_Operator_Name">any in the selection
list</ID>
</Relational_Operator_Reference>
<Condition_Entry_Option_Reference
Descriptor="Value specified in this filter">
<ID type="WID">da59516c446c11de98360015c5e6daf6</ID>
<ID type="Condition_Entry_Option_Name">Value specified in
this filter</ID>
</Condition_Entry_Option_Reference>
<Source_External_Field_Reference
Descriptor="Organization and Superior Organizations (Compensation)">
<ID type="WID">a82f9b81a414453cbf2b103af7d1484f</ID>
</Source_External_Field_Reference>
<Target_Instance_Reference
Descriptor="AAFT Workday (David Harris)">
<ID type="WID">1a90d104082a101c6485a8ac1a3c0750</ID>
<ID type="Organization_Reference_ID"
>SUPERVISORY_ORGANIZATION-6-327</ID>
</Target_Instance_Reference>
</Condition_Item_Data>
<Condition_Item_Data>
<Order>b</Order>
<And_Or_Operator_Reference Descriptor="And">
<ID type="WID">da4e1c34446c11de98360015c5e6daf6</ID>
<ID type="And_Or_Operator_Name">And</ID>
</And_Or_Operator_Reference>
<Relational_Operator_Reference
Descriptor="in the selection list">
<ID type="WID">d5228d9e446c11de98360015c5e6daf6</ID>
<ID type="Relational_Operator_Name">in the selection
list</ID>
</Relational_Operator_Reference>
<Condition_Entry_Option_Reference
Descriptor="Value specified in this filter">
<ID type="WID">da59516c446c11de98360015c5e6daf6</ID>
<ID type="Condition_Entry_Option_Name">Value specified in
this filter</ID>
</Condition_Entry_Option_Reference>
<Source_External_Field_Reference
Descriptor="Management Level (Compensation)">
<ID type="WID">6c04adc731e645309d41fb9b9dc5de45</ID>
</Source_External_Field_Reference>
<Target_Instance_Reference Descriptor="6 Manager">
<ID type="WID">0e93fa4e0cc94867adb662a0ee8430d5</ID>
<ID type="Management_Level_ID">6_Manager</ID>
</Target_Instance_Reference>
<Target_Instance_Reference Descriptor="5 Director">
<ID type="WID">0b778018b3b44ca3959e498041865645</ID>
<ID type="Management_Level_ID">5_Director</ID>
</Target_Instance_Reference>
<Target_Instance_Reference Descriptor="4 Vice President">
<ID type="WID">679d4d1ac6da40e19deb7d91e170431d</ID>
<ID type="Management_Level_ID">4_Vice_President</ID>
</Target_Instance_Reference>
<Target_Instance_Reference
Descriptor="3 Executive Vice President">
<ID type="WID">0ceb3292987b474bbc40c751a1e22c69</ID>
<ID type="Management_Level_ID"
>3_Executive_Vice_President</ID>
</Target_Instance_Reference>
<Target_Instance_Reference
Descriptor="2 Chief Executive Officer">
<ID type="WID">3de1f2834f064394a40a40a727fb6c6d</ID>
<ID type="Management_Level_ID"
>2_Chief_Executive_Officer</ID>
</Target_Instance_Reference>
<Target_Instance_Reference Descriptor="1 Board of Directors">
<ID type="WID">438baab049b14657b7d52ddb4703cc3e</ID>
<ID type="Management_Level_ID">1_Board_of_Directors</ID>
</Target_Instance_Reference>
</Condition_Item_Data>
</Rule_Data>
<Compensation_Grade_Reference
Descriptor="AAFT Workday Management Grade">
<ID type="WID">1a90d104082a101c6ad761aaeb2408ad</ID>
<ID type="Compensation_Grade_ID">COMPENSATION_GRADE-6-19</ID>
</Compensation_Grade_Reference>
<Compensation_Plan_Reference
Descriptor="AAFT Workday Car Allowance Plan">
<ID type="WID">1a90d104082a101c6b7f66f03dfc08e8</ID>
<ID type="Compensation_Plan_ID">ALLOWANCE_AMOUNT_PLAN-6-14</ID>
</Compensation_Plan_Reference>
<Compensation_Plan_Reference Descriptor="AAFT Merit Plan">
<ID type="WID">c49a621d552b102865843b4496fc91c7</ID>
<ID type="Compensation_Plan_ID">MERIT_PLAN-6-37</ID>
</Compensation_Plan_Reference>
</Compensation_Eligibility_Rule_Data>
</Compensation_Eligibility_Rule>
</Response_Data>
</Get_Compensation_Eligibility_Rules_Response>
</Body>
</Envelope>
My XSLT is Below:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs" version="1.0">
<xsl:output method="text"></xsl:output>
<xsl:strip-space elements="*"/>
<xsl:template match="Report_Data_Outer">
<xsl:text>Eligibility Rule</xsl:text>
<xsl:text>,</xsl:text>
<xsl:text>Reference ID</xsl:text>
<xsl:text>,</xsl:text>
<xsl:text>And Or Operator</xsl:text>
<xsl:text>,</xsl:text>
<xsl:text>Relational Operator</xsl:text>
<xsl:text>,</xsl:text>
<xsl:text>Entry_Option</xsl:text>
<xsl:text>,</xsl:text>
<xsl:text>Source_External_Field</xsl:text>
<xsl:text>,</xsl:text>
<xsl:text>Source_Condition_Rule</xsl:text>
<xsl:text>,</xsl:text>
<xsl:text>Target_Instance</xsl:text>
<xsl:text>,</xsl:text>
<xsl:text>Boolean</xsl:text>
<xsl:text>
</xsl:text>
<xsl:for-each select="Envelope/Body/Get_Compensation_Eligibility_Rules_Response/Response_Data/Compensation_Eligibility_Rule/Compensation_Eligibility_Rule_Data/Rule_Data">
<xsl:variable name="Rule_Description"><xsl:value-of select="(Rule_Description)"/></xsl:variable>
<xsl:variable name="Condition_Rule_ID"><xsl:value-of select="(Condition_Rule_ID)"/></xsl:variable>
<xsl:for-each select="Condition_Item_Data">
<xsl:variable name="And_Or_Operator"><xsl:value-of select="(And_Or_Operator_Reference/ID[2])"/></xsl:variable>
<xsl:variable name="Relational_Operator"><xsl:value-of select="(Relational_Operator_Reference/ID[2])"/></xsl:variable>
<xsl:variable name="Condition_Entry_Option"><xsl:value-of select="(Condition_Entry_Option_Reference/ID[2])"/></xsl:variable>
<xsl:variable name="Source_External_Field"><xsl:value-of select="(Source_External_Field_Reference[1]/@Descriptor)"/></xsl:variable>
<xsl:variable name="Source_Condition_Rule"><xsl:value-of select="(Source_Condition_Rule_Reference[1]/@Descriptor)"/></xsl:variable>
<xsl:variable name="Boolean"><xsl:value-of select="(Filter_Boolean)"/></xsl:variable>
<xsl:for-each select="Target_Instance_Reference">
<xsl:value-of select="position()"/>
<xsl:text>,</xsl:text>
<xsl:value-of select="$Rule_Description"/>
<xsl:text>,</xsl:text>
<xsl:value-of select="$Condition_Rule_ID"/>
<xsl:text>,</xsl:text>
<xsl:value-of select="$And_Or_Operator"/>
<xsl:text>,</xsl:text>
<xsl:value-of select="$Relational_Operator"/>
<xsl:text>,</xsl:text>
<xsl:value-of select="$Condition_Entry_Option"/>
<xsl:text>,</xsl:text>
<xsl:value-of select="$Source_External_Field"/>
<xsl:text>,</xsl:text>
<xsl:value-of select="$Source_Condition_Rule"/>
<xsl:text>,</xsl:text>
<xsl:value-of select="@Descriptor"/>
<xsl:text>
</xsl:text>
</xsl:for-each>
<xsl:for-each select="Filter_Boolean">
<xsl:value-of select="position()"/>
<xsl:text>,</xsl:text>
<xsl:value-of select="$Rule_Description"/>
<xsl:text>,</xsl:text>
<xsl:value-of select="$Condition_Rule_ID"/>
<xsl:text>,</xsl:text>
<xsl:value-of select="$And_Or_Operator"/>
<xsl:text>,</xsl:text>
<xsl:value-of select="$Relational_Operator"/>
<xsl:text>,</xsl:text>
<xsl:value-of select="$Condition_Entry_Option"/>
<xsl:text>,</xsl:text>
<xsl:value-of select="$Source_External_Field"/>
<xsl:text>,</xsl:text>
<xsl:value-of select="$Source_Condition_Rule"/>
<xsl:text>,</xsl:text>
<xsl:text>,</xsl:text>
<xsl:value-of select="$Boolean"/>
<xsl:text>
</xsl:text>
</xsl:for-each>
</xsl:for-each>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
The inner loops are based on for-each select="Target_Instance_Reference"
and for-each select="Filter_Boolean"
. I tried using position function but it generates rows like below:
sequence numbers generated: 1,1,2,3,4,5,6
But it to be like below (expected):
sequence numbers expected: 1,2,3,4,5,6,7
Requesting gurus , please suggest me how do I get my SeqNo generation corrected.
Thank You!
Your examples don't seem to work with copy/paste and I don't have time to figure out why right now, but after taking a quick look at your stylesheet I think you should try replacing:
<xsl:value-of select="position()"/>
with
<xsl:number level="any" count="Target_Instance_Reference|Filter_Boolean"/>
in both of your inner loops ( xsl:for-each
's that select Target_Instance_Reference
and Filter_Boolean
if I understand correctly).
Here's a slightly modified version of your XSLT that produces the sequence numbers that you requested. However, Filter_Boolean
does not exist in the XML input so if you're still getting incorrect sequence numbers, you will need to update your question with a better input example.
XML Input
<Envelope>
<Body>
<Get_Compensation_Eligibility_Rules_Response version="v23.2">
<Request_References>
<Compensation_Eligibility_Rule_Reference Descriptor="AAFT Workday Management">
<ID type="WID">1a90d104082a101c6a5b8adb783c0891</ID>
<ID type="Condition_Rule_ID">CONDITION_RULE-6-999</ID>
</Compensation_Eligibility_Rule_Reference>
</Request_References>
<Response_Filter>
<As_Of_Effective_Date>2015-08-04-07:00</As_Of_Effective_Date>
<As_Of_Entry_DateTime>2015-08-04T23:51:56.000-07:00</As_Of_Entry_DateTime>
<Page>1</Page>
<Count>100</Count>
</Response_Filter>
<Response_Results>
<Total_Results>1</Total_Results>
<Total_Pages>1</Total_Pages>
<Page_Results>1</Page_Results>
<Page>1</Page>
</Response_Results>
<Response_Data>
<Compensation_Eligibility_Rule>
<Compensation_Eligibility_Rule_Data>
<Effective_Date>2015-08-04-07:00</Effective_Date>
<Rule_Data>
<Condition_Rule_ID>CONDITION_RULE-6-999</Condition_Rule_ID>
<Rule_Description>AAFT Workday Management</Rule_Description>
<Condition_Item_Data>
<Order>a</Order>
<And_Or_Operator_Reference Descriptor="And">
<ID type="WID">da4e1c34446c11de98360015c5e6daf6</ID>
<ID type="And_Or_Operator_Name">And</ID>
</And_Or_Operator_Reference>
<Relational_Operator_Reference
Descriptor="any in the selection list">
<ID type="WID">d5227566446c11de98360015c5e6daf6</ID>
<ID type="Relational_Operator_Name">any in the selection
list</ID>
</Relational_Operator_Reference>
<Condition_Entry_Option_Reference
Descriptor="Value specified in this filter">
<ID type="WID">da59516c446c11de98360015c5e6daf6</ID>
<ID type="Condition_Entry_Option_Name">Value specified in
this filter</ID>
</Condition_Entry_Option_Reference>
<Source_External_Field_Reference
Descriptor="Organization and Superior Organizations (Compensation)">
<ID type="WID">a82f9b81a414453cbf2b103af7d1484f</ID>
</Source_External_Field_Reference>
<Target_Instance_Reference
Descriptor="AAFT Workday (David Harris)">
<ID type="WID">1a90d104082a101c6485a8ac1a3c0750</ID>
<ID type="Organization_Reference_ID"
>SUPERVISORY_ORGANIZATION-6-327</ID>
</Target_Instance_Reference>
</Condition_Item_Data>
<Condition_Item_Data>
<Order>b</Order>
<And_Or_Operator_Reference Descriptor="And">
<ID type="WID">da4e1c34446c11de98360015c5e6daf6</ID>
<ID type="And_Or_Operator_Name">And</ID>
</And_Or_Operator_Reference>
<Relational_Operator_Reference
Descriptor="in the selection list">
<ID type="WID">d5228d9e446c11de98360015c5e6daf6</ID>
<ID type="Relational_Operator_Name">in the selection
list</ID>
</Relational_Operator_Reference>
<Condition_Entry_Option_Reference
Descriptor="Value specified in this filter">
<ID type="WID">da59516c446c11de98360015c5e6daf6</ID>
<ID type="Condition_Entry_Option_Name">Value specified in
this filter</ID>
</Condition_Entry_Option_Reference>
<Source_External_Field_Reference
Descriptor="Management Level (Compensation)">
<ID type="WID">6c04adc731e645309d41fb9b9dc5de45</ID>
</Source_External_Field_Reference>
<Target_Instance_Reference Descriptor="6 Manager">
<ID type="WID">0e93fa4e0cc94867adb662a0ee8430d5</ID>
<ID type="Management_Level_ID">6_Manager</ID>
</Target_Instance_Reference>
<Target_Instance_Reference Descriptor="5 Director">
<ID type="WID">0b778018b3b44ca3959e498041865645</ID>
<ID type="Management_Level_ID">5_Director</ID>
</Target_Instance_Reference>
<Target_Instance_Reference Descriptor="4 Vice President">
<ID type="WID">679d4d1ac6da40e19deb7d91e170431d</ID>
<ID type="Management_Level_ID">4_Vice_President</ID>
</Target_Instance_Reference>
<Target_Instance_Reference
Descriptor="3 Executive Vice President">
<ID type="WID">0ceb3292987b474bbc40c751a1e22c69</ID>
<ID type="Management_Level_ID"
>3_Executive_Vice_President</ID>
</Target_Instance_Reference>
<Target_Instance_Reference
Descriptor="2 Chief Executive Officer">
<ID type="WID">3de1f2834f064394a40a40a727fb6c6d</ID>
<ID type="Management_Level_ID"
>2_Chief_Executive_Officer</ID>
</Target_Instance_Reference>
<Target_Instance_Reference Descriptor="1 Board of Directors">
<ID type="WID">438baab049b14657b7d52ddb4703cc3e</ID>
<ID type="Management_Level_ID">1_Board_of_Directors</ID>
</Target_Instance_Reference>
</Condition_Item_Data>
</Rule_Data>
<Compensation_Grade_Reference
Descriptor="AAFT Workday Management Grade">
<ID type="WID">1a90d104082a101c6ad761aaeb2408ad</ID>
<ID type="Compensation_Grade_ID">COMPENSATION_GRADE-6-19</ID>
</Compensation_Grade_Reference>
<Compensation_Plan_Reference
Descriptor="AAFT Workday Car Allowance Plan">
<ID type="WID">1a90d104082a101c6b7f66f03dfc08e8</ID>
<ID type="Compensation_Plan_ID">ALLOWANCE_AMOUNT_PLAN-6-14</ID>
</Compensation_Plan_Reference>
<Compensation_Plan_Reference Descriptor="AAFT Merit Plan">
<ID type="WID">c49a621d552b102865843b4496fc91c7</ID>
<ID type="Compensation_Plan_ID">MERIT_PLAN-6-37</ID>
</Compensation_Plan_Reference>
</Compensation_Eligibility_Rule_Data>
</Compensation_Eligibility_Rule>
</Response_Data>
</Get_Compensation_Eligibility_Rules_Response>
</Body>
</Envelope>
XSLT 1.0
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs" version="1.0">
<xsl:output method="text"></xsl:output>
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<xsl:text>Eligibility Rule</xsl:text>
<xsl:text>,</xsl:text>
<xsl:text>Reference ID</xsl:text>
<xsl:text>,</xsl:text>
<xsl:text>And Or Operator</xsl:text>
<xsl:text>,</xsl:text>
<xsl:text>Relational Operator</xsl:text>
<xsl:text>,</xsl:text>
<xsl:text>Entry_Option</xsl:text>
<xsl:text>,</xsl:text>
<xsl:text>Source_External_Field</xsl:text>
<xsl:text>,</xsl:text>
<xsl:text>Source_Condition_Rule</xsl:text>
<xsl:text>,</xsl:text>
<xsl:text>Target_Instance</xsl:text>
<xsl:text>,</xsl:text>
<xsl:text>Boolean</xsl:text>
<xsl:text>
</xsl:text>
<xsl:for-each select="Envelope/Body/Get_Compensation_Eligibility_Rules_Response/Response_Data/Compensation_Eligibility_Rule/Compensation_Eligibility_Rule_Data/Rule_Data">
<xsl:variable name="Rule_Description"><xsl:value-of select="normalize-space(Rule_Description)"/></xsl:variable>
<xsl:variable name="Condition_Rule_ID"><xsl:value-of select="normalize-space(Condition_Rule_ID)"/></xsl:variable>
<xsl:for-each select="Condition_Item_Data">
<xsl:variable name="And_Or_Operator"><xsl:value-of select="normalize-space(And_Or_Operator_Reference/ID[2])"/></xsl:variable>
<xsl:variable name="Relational_Operator"><xsl:value-of select="normalize-space(Relational_Operator_Reference/ID[2])"/></xsl:variable>
<xsl:variable name="Condition_Entry_Option"><xsl:value-of select="normalize-space(Condition_Entry_Option_Reference/ID[2])"/></xsl:variable>
<xsl:variable name="Source_External_Field"><xsl:value-of select="normalize-space(Source_External_Field_Reference[1]/@Descriptor)"/></xsl:variable>
<xsl:variable name="Source_Condition_Rule"><xsl:value-of select="normalize-space(Source_Condition_Rule_Reference[1]/@Descriptor)"/></xsl:variable>
<xsl:variable name="Boolean"><xsl:value-of select="normalize-space(Filter_Boolean)"/></xsl:variable>
<xsl:for-each select="Target_Instance_Reference">
<xsl:number level="any" count="Target_Instance_Reference|Filter_Boolean"/>
<xsl:text>,</xsl:text>
<xsl:value-of select="$Rule_Description"/>
<xsl:text>,</xsl:text>
<xsl:value-of select="$Condition_Rule_ID"/>
<xsl:text>,</xsl:text>
<xsl:value-of select="$And_Or_Operator"/>
<xsl:text>,</xsl:text>
<xsl:value-of select="$Relational_Operator"/>
<xsl:text>,</xsl:text>
<xsl:value-of select="$Condition_Entry_Option"/>
<xsl:text>,</xsl:text>
<xsl:value-of select="$Source_External_Field"/>
<xsl:text>,</xsl:text>
<xsl:value-of select="$Source_Condition_Rule"/>
<xsl:text>,</xsl:text>
<xsl:value-of select="@Descriptor"/>
<xsl:text>
</xsl:text>
</xsl:for-each>
<xsl:for-each select="Filter_Boolean">
<xsl:number level="any" count="Target_Instance_Reference|Filter_Boolean"/>
<xsl:text>,</xsl:text>
<xsl:value-of select="$Rule_Description"/>
<xsl:text>,</xsl:text>
<xsl:value-of select="$Condition_Rule_ID"/>
<xsl:text>,</xsl:text>
<xsl:value-of select="$And_Or_Operator"/>
<xsl:text>,</xsl:text>
<xsl:value-of select="$Relational_Operator"/>
<xsl:text>,</xsl:text>
<xsl:value-of select="$Condition_Entry_Option"/>
<xsl:text>,</xsl:text>
<xsl:value-of select="$Source_External_Field"/>
<xsl:text>,</xsl:text>
<xsl:value-of select="$Source_Condition_Rule"/>
<xsl:text>,</xsl:text>
<xsl:text>,</xsl:text>
<xsl:value-of select="$Boolean"/>
<xsl:text>
</xsl:text>
</xsl:for-each>
</xsl:for-each>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
Output
Eligibility Rule,Reference ID,And Or Operator,Relational Operator,Entry_Option,Source_External_Field,Source_Condition_Rule,Target_Instance,Boolean
1,AAFT Workday Management,CONDITION_RULE-6-999,And,any in the selection list,Value specified in this filter,Organization and Superior Organizations (Compensation),,AAFT Workday (David Harris)
2,AAFT Workday Management,CONDITION_RULE-6-999,And,in the selection list,Value specified in this filter,Management Level (Compensation),,6 Manager
3,AAFT Workday Management,CONDITION_RULE-6-999,And,in the selection list,Value specified in this filter,Management Level (Compensation),,5 Director
4,AAFT Workday Management,CONDITION_RULE-6-999,And,in the selection list,Value specified in this filter,Management Level (Compensation),,4 Vice President
5,AAFT Workday Management,CONDITION_RULE-6-999,And,in the selection list,Value specified in this filter,Management Level (Compensation),,3 Executive Vice President
6,AAFT Workday Management,CONDITION_RULE-6-999,And,in the selection list,Value specified in this filter,Management Level (Compensation),,2 Chief Executive Officer
7,AAFT Workday Management,CONDITION_RULE-6-999,And,in the selection list,Value specified in this filter,Management Level (Compensation),,1 Board of Directors
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.