Я хочу получить группировку узла, используя узел /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() < $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