Добрый день. Я новичок в XSLT. У меня есть требование генерировать порядковый номер для каждой строки, записанной в текстовый файл.Создать нумерацию последовательностей в XSLT
У меня есть 2 внутренних петли и один внешний для петли. Для каждого конкретного условия внешнего управления контуром проходит внутренняя 2 для петель. Первый внутренний цикл for-loop записывает пару строк в текстовый файл, за которым следует второй внутренний цикл for-loop.
Скажем, например, первый внутренний для цикла записывает 3 строки в текстовый файл, а затем второй внутренний пишет 2 строки в текстовый файл, то вывод должен быть как
SeqNo:
1
2
3
4
5
Ниже мой 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>
Мой XSLT ниже:
<?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>
внутренние циклы основаны на for-each select="Target_Instance_Reference"
и for-each select="Filter_Boolean"
. Я попытался с помощью функции позиции, но он генерирует строки, как показано ниже:
последовательности чисел, сгенерированных: 1,1,2,3,4,5,6
Но это будет, как показано ниже (ожидаемое):
Ожидаемые порядковые номера: 1,2,3,4,5,6,7
Запрашивая гуру, пожалуйста, предложите мне, как я могу исправить свое поколение SeqNo.
Спасибо!
Благодаря Daniel для поиска в нем. генерирует для меня частично правильные результаты. Что он на самом деле делает, так это то, что он генерирует последовательность для первого внутреннего цикла for, например Sl.no: 1, 2,3,4, .... так далее до 330, а второй внутренний цикл создает еще одну последовательность, начиная с например, Sl.no: 1,2,3 ... так далее до 103. Мое требование состоит в том, чтобы сгенерировать sl.no начиная с1,2,3,4 и так далее до 433 (330, которые первые для цикла генерируют и 103, который будет генерировать второй цикл for). Sl.no - последовательно следует добавлять в текстовый файл как и когда я пишу строки в текстовый файл. –
SasukeSurendra
Я здесь новый, если я не очень ясен, то, пожалуйста, дайте мне знать. – SasukeSurendra
@SasukeSurendra - Трудная часть ответа на этот вопрос заключается в том, что, если мы скопируем ваш входной XML и ваш XSLT и запустим их самостоятельно, мы не сможем воспроизвести то, что вы видите. Например, ваш единственный 'xsl: template' соответствует' Report_Data_Outer', который не существует на вашем входе. Если мы изменим это на '/', мы начнем получать достойный вывод, но поскольку на вашем входе нет 'Filter_Boolean', мы не можем воспроизвести порядковые номера, которые вы видите. –