Есть ли способ идентифицировать количество строк в XSLT с несколькими условиями? - PullRequest
0 голосов
/ 06 апреля 2020

Я пытаюсь добиться подсчета записей в моем выводе из образца XML ниже через xsl.

Справочная информация: У каждого сотрудника есть несколько иждивенцев (ребенок, супруг) в зависимости от покрытия сотрудников мы заполняем результаты в выходном файле.

Если покрытие 'Employee_only', то у нас НЕ будет зависимостей в выводе. Если «Семейное покрытие», то в выходных данных у нас будут иждивенцы.

<root xmlns:wd="http://wd.com">        <!-- Added by edit -->
    <wd:Report_Entry>
        <wd:Employee_ID>Empl_001</wd:Employee_ID>
        <wd:Benefits>
            <wd:Coverage>Family</wd:Coverage>
        </wd:Benefits>
        <wd:Dependents>
            <wd:Relationship1>Child</wd:Relationship1>
            <wd:Dep_LastName>Child_A</wd:Dep_LastName>
        </wd:Dependents>
        <wd:Dependents>
            <wd:Relationship1>Spouse</wd:Relationship1>
            <wd:Dep_LastName>Spouse</wd:Dep_LastName>
        </wd:Dependents>
    </wd:Report_Entry>
    <wd:Report_Entry>
        <wd:Employee_ID>Empl_002</wd:Employee_ID>
        <wd:Benefits>
            <wd:Coverage>Family</wd:Coverage>
        </wd:Benefits>
        <wd:Dependents>
            <wd:Relationship1>Child</wd:Relationship1>
            <wd:Dep_LastName>Child_A</wd:Dep_LastName>
        </wd:Dependents>
        <wd:Dependents>
            <wd:Relationship1>Child</wd:Relationship1>
            <wd:Dep_LastName>Child_B</wd:Dep_LastName>
        </wd:Dependents>
        <wd:Dependents>
            <wd:Relationship1>Spouse</wd:Relationship1>
            <wd:Dep_LastName>Spouse</wd:Dep_LastName>
        </wd:Dependents>
    </wd:Report_Entry>
    <wd:Report_Entry>
        <wd:Employee_ID>Empl_003</wd:Employee_ID>
        <wd:Benefits>
            <wd:Coverage>Employee_Only</wd:Coverage>
        </wd:Benefits>
        <wd:Dependents>
            <wd:Relationship1>Child</wd:Relationship1>
            <wd:Dep_LastName>Child_A</wd:Dep_LastName>
        </wd:Dependents>
        <wd:Dependents>
            <wd:Relationship1>Spouse</wd:Relationship1>
            <wd:Dep_LastName>Spouse</wd:Dep_LastName>
        </wd:Dependents>
    </wd:Report_Entry>
</root>                               <!-- Added by edit -->

- Выходные данные будут примерно такими, как показано ниже:

Header
Empl_001
001_Child_A
001_Spouse
Empl_002
002_Child_A
002_Child_B
002_Spouse
Empl_003
Trailer -  **8**

Ожидаемый счетчик этого XML результат будет 8 , а НЕ 10, потому что покрытие последнего сотрудника - «Employee_only», а не «Family».

Условия: Подсчитать сотрудников + иждивенцев [Для сотрудника, который имеет покрытие в качестве семьи].

Я использую ниже XSLT-код:

  • Ниже дает меня 3 в качестве подсчета, который составляет общее количество работников.

    <xsl:value-of select="count(//wd:Report_Entry)"/>
    
  • Ниже приводится мне 7 в качестве подсчета, что составляет общее количество зависимых.

    <xsl:value-of select="count(//wd:Report_Entry/wd:Dependents)"/>
    
  • Ниже приведено 2, поскольку общее число сотрудников, имеющих покрытие как «Семья».

    <xsl:value-of select="count(//wd:Benefits[wd:Coverage ='Family']"/>
    

Мне нужно сопоставить общее количество # Сотрудник + Зависимые лица [Для Сотрудника, который имеет покрытие как «Семья»]

Эксперты, Пожалуйста, помогите, как считать в этом состоянии.

Ответы [ 2 ]

0 голосов
/ 06 апреля 2020

Попробуйте это выражение XPath-1.0:

count(//wd:Report_Entry) + count(//wd:Report_Entry[wd:Benefits/wd:Coverage ='Family']/wd:Dependents)

Его результат 3+5=8.

0 голосов
/ 06 апреля 2020

Ваш заголовок говорит о "множественных условиях", но я вижу только одно. Чтобы подсчитать иждивенцев сотрудников с покрытием «Семья», используйте:

<xsl:value-of select="count(//wd:Report_Entry[wd:Benefits/wd:Coverage='Family']/wd:Dependents)"/>

Чтобы включить в подсчет всех сотрудников (без условий), вы можете сделать:

<xsl:value-of select="count(//wd:Report_Entry | //wd:Report_Entry[wd:Benefits/wd:Coverage='Family']/wd:Dependents)"/>
...