Считать уникальные значения в разных кодах после поиска значения с другим узлом (XSLT 1) - PullRequest
0 голосов
/ 17 октября 2019

Я хочу получить группировку узла, используя узел /continuitydays/ES_CONTINUITYDAY/txevents/ES_BMTXEVENT/txortxeventproduct/ES_PRODUCT/@p_episode_seriestitle, затем, после того, как я хочу подсчитать, сколько эпизодов принадлежит. Но здесь эпизод повторяется несколько раз, поэтому я хочу сделать уникальным использование /continuitydays/ES_CONTINUITYDAY/txevents/ES_BMTXEVENT/transmission/ES_TRANSMISSION/@tx_external_reference этого xpath. Используя этоВ XPATH будет выбрана только одна запись, и будет учитываться только эта необработанная функция подсчета и суммирования.

Количество эпизодов с использованием значений ниже XPATH:

count(/continuitydays/ES_CONTINUITYDAY/txevents/ES_BMTXEVENT[txortxeventproduct/ES_PRODUCT/@p_episode_seriestitle='101 Dalmatian Street S1'])

Продолжительность с использованием значений ниже XPATH:

SUM(/continuitydays/ES_CONTINUITYDAY/txevents/ES_BMTXEVENT[txortxeventproduct/ES_PRODUCT/@p_episode_seriestitle='101 Dalmatian Street S1']/startTimePointInUtc/ESP_TIMEINSTANT/@duration)       


count(/continuitydays/ES_CONTINUITYDAY/txevents/ES_BMTXEVENT[txortxeventproduct/ES_PRODUCT/@p_episode_seriestitle='101 Dalmatian Street S1']/transmission/ES_TRANSMISSION/@tx_external_reference)

Это дает мне 6 отсчетов для эпизода, но фактическое количество составляет только 3. Логика для подгруппы (3 отсчета) Сначала группируют p_episode_seriestitle, затем подсчитывают все эпизоды с различными значениями / continueitydays / ES_CONTINUITYDAY / txevents / ES_BMTXEVENT / txortxeventproductES_PRODUCT / @ p_product_title и / непрерывность дней / ES_CONTINUITYDAY / txevents / ES_BMTXEVENT / передача / ES_TRANSMISSION / @ tx_external_reference

Мой исходный код

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
    <xsl:output method="xml" indent="yes" encoding="UTF-8" version="1.0"/>
    <xsl:template match="continuitydays">
        <xsl:for-each select="ES_CONTINUITYDAY/txevents/ES_BMTXEVENT">
            <!--check duplicate season title-->
            <xsl:variable name="lvSeriesTitle" select="txortxeventproduct/ES_PRODUCT/@p_episode_seriestitle"/>
            <xsl:variable name="lvRepeatable">
                <xsl:call-template name="repeatableEpisode">
                    <xsl:with-param name="index" select="position()"/>
                    <xsl:with-param name="repeatableName" select="$lvSeriesTitle"/>
                    <xsl:with-param name="filterPath" select="//continuitydays/ES_CONTINUITYDAY/txevents/ES_BMTXEVENT"/>
                </xsl:call-template>
            </xsl:variable>
            <!-- skipping if episode is more than one in season -->
            <xsl:if test="string-length($lvRepeatable) = 0">
                <xsl:variable name="lvEpisodeTitleTypePath" select="/continuitydays/ES_CONTINUITYDAY/txevents/ES_BMTXEVENT[txortxeventproduct/ES_PRODUCT/p_episode_series/ES_PRODUCT/@p_product_title = $lvSeriesTitle]"/>
                <!--         Episode Count using below XPATH:
    count(/continuitydays/ES_CONTINUITYDAY/txevents/ES_BMTXEVENT[txortxeventproduct/ES_PRODUCT/@p_episode_seriestitle='101 Dalmatian Street S1'])

    Duration using below XPATH:
    SUM(/continuitydays/ES_CONTINUITYDAY/txevents/ES_BMTXEVENT[txortxeventproduct/ES_PRODUCT/@p_episode_seriestitle='101 Dalmatian Street S1']/startTimePointInUtc/ESP_TIMEINSTANT/@duration)   -->
            </xsl:if>
        </xsl:for-each>
    </xsl:template>
    <xsl:template name="repeatableEpisode">
        <xsl:param name="index"/>
        <xsl:param name="repeatableName"/>
        <xsl:param name="filterPath"/>
        <xsl:for-each select="$filterPath">
            <xsl:if test="position() &lt; $index">
                <xsl:if test="$repeatableName = txortxeventproduct/ES_PRODUCT/@p_episode_seriestitle">
                    <xsl:value-of select="'true'"/>
                </xsl:if>
            </xsl:if>
        </xsl:for-each>
    </xsl:template>
</xsl:stylesheet>

Источник: 1017 * W 1017 * W 1016 * W сильныйВывод, как показано ниже:

    Title                      Episode Count    Duration
    101 Dalmatian Street S1    6                    2424.8

Я хочу Вывод, как показано ниже:

    Title                      Episode Count    Duration
    101 Dalmatian Street S1    3                    1212.4
...