XPath селектор элементов с тем же значением атрибута
Пусть есть элементы XML:
<DOCUMENT SIZE="10x15" TYPE="ФОТОБУМАГА СТАНДАРТ" COUNT="2" PRICE="10" PRICE2="9" PRICE3="7">
<DOCUMENT SIZE="15x21" TYPE="ФОТОБУМАГА СТАНДАРТ" COUNT="3" PRICE="30" PRICE2="25" PRICE3="20" >
<DOCUMENT SIZE="10x15" TYPE="ФОТОБУМАГА СТАНДАРТ" COUNT="4" PRICE="10" PRICE2="9" PRICE3="7">
Они имеют разные значения атрибута SIZE.
Нужно в шаблоне для каждого элемента <document> подсчитать общее количество таких же по размеру и типу элементов:
Вот код шаблона, но процессор, почему-то, выбирает все элементы вместо нужных:
<xsl:template match="DOCUMENT" mode="sum">
<xsl:param name="sum" select="0"/>
<xsl:variable name="curid" select="@ID"/>
<!-- Тип текущего элемента -->
<xsl:variable name="type" select="/PAGE/CONTENT/BASKET/UPLOADIMG/DOCUMENT[@ID=$curid]/@TYPE"/>
<!-- Размер текущего элемента -->
<xsl:variable name="size" select="/PAGE/CONTENT/BASKET/UPLOADIMG/DOCUMENT[@ID=$curid]/@SIZE"/>
<!-- Подсчет кол-ва однотипных элементов для текущего элемента -->
<xsl:variable name="count" select="sum(/PAGE/CONTENT/BASKET/UPLOADIMG/DOCUMENT[@SIZE=$size and @TYPE=$type]/@COUNT)"/>
<xsl:variable name="price">
<xsl:choose>
<xsl:when test="$count < 100"><xsl:value-of select="/PAGE/CONTENT/BASKET/UPLOADIMG/DOCUMENT[@ID=$curid]/@PRICE"/></xsl:when>
<xsl:when test="$count < 201"><xsl:value-of select="/PAGE/CONTENT/BASKET/UPLOADIMG/DOCUMENT[@ID=$curid]/@PRICE2"/></xsl:when>
<xsl:when test="$count > 200"><xsl:value-of select="/PAGE/CONTENT/BASKET/UPLOADIMG/DOCUMENT[@ID=$curid]/@PRICE3"/></xsl:when>
</xsl:choose>
</xsl:variable>
<!--
count-<xsl:value-of select="$count"/><br />
price-<xsl:value-of select="$price"/><br />
-->
<xsl:variable name="curSum" select="$sum + $price*@COUNT"/>
<xsl:apply-templates select="following-sibling::DOCUMENT[1]" mode="sum">
<xsl:with-param name="sum" select="$curSum"/>
</xsl:apply-templates>
<xsl:if test="not(following-sibling::DOCUMENT[1])">
<xsl:choose>
<xsl:when test="$curSum>0"><xsl:value-of select="$curSum"/></xsl:when>
<xsl:otherwise>0</xsl:otherwise>
</xsl:choose>
</xsl:if>
</xsl:template>
Ответы (1 шт):
Автор решения: OlegUP
→ Ссылка
Все работает, просто я не совсем внимательно посмотрел шаблон. В файле шаблона 4 таких похожих друг на друга участка. По два на корзину и письмо электронной почты, и в каждой из этих двух сущностей отдельный подсчет для товара и итоговый расчет. Селектор верный.