XSL Умножение значения, умноженного на значение в значении select

У меня есть этот код:

<xsl:value-of 
select="sum(objects/object/items/item[not(product_type='configurable' and 
count(custom_options/custom_option[option_id='2686']) &gt; 
0)]/custom_options/custom_option[option_id='2686']/value)" />

Который корректно выводит целое число, которое я хочу, но теперь в другом поле, я хочу mutiply это qty_ordered, в моем случае . Поэтому я попытался:<xsl:value-of select="sum(objects/object/items/item[not(product_type='configurable' and count(custom_options/custom_option[option_id='2686']) &gt; 0)]/custom_options/custom_option[option_id='2686']/value * qty_ordered)" />

id2686/value * qty_ordered

К сожалению, это не работает, и я понятия не имею, как это сделать, кто может помочь мне создать строку кода, которая выводит qty_ordered? также находится в <custom_option> <name> Aantal pagina's в формате PDF </ name> <значение> 1 </ value> <sku /> <option_id> 2686 </ option_id> </ custom_option> / item loop.<items> <item> <qty_ordered>5.0000</qty_ordered>

Это вход:

qty_ordered

а также

value

xml,xslt,

0

Ответов: 1


0 принят

В XSLT 1.0 есть несколько способов сделать это. Один из способов - создать временное дерево результатов, которое содержит отдельные значения и для каждого элемента, например:<xsl:variable name="items"> <xsl:for-each select="item[not(product_type='configurable')]"> <item> <xsl:value-of select="qty_ordered * custom_options/custom_option/value" /> </item> </xsl:for-each> </xsl:variable>value

items

Однако в XSLT 1.0 вам нужно будет использовать функцию расширения для доступа к узлам в переменной (поскольку itemsпеременная имеет тип «фрагмент результирующего дерева» и должна быть преобразована в набор узлов, предназначенный для использования с функцией sum ). Наиболее распространенным из них является exslt.

Попробуйте этот XSLT (я упростил выражение xpath для краткости)

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:exslt="http://exslt.org/common"
                exclude-result-prefixes="exslt"
                version="1.0">

  <xsl:output method="xml" indent="yes" />

  <xsl:template match="items">
    <xsl:variable name="items">
      <xsl:for-each select="item[not(product_type='configurable')]">
        <item>
          <xsl:value-of select="qty_ordered * custom_options/custom_option/value" />
        </item>
      </xsl:for-each>
    </xsl:variable>

    <result>
      <xsl:value-of select="sum(exslt:node-set($items)/item)" />
    </result>
  </xsl:template>
</xsl:stylesheet>

Когда вы применяете его к этому XML

<items>
   <item>
      <qty_ordered>5.0000</qty_ordered>
      <custom_options>
         <custom_option>
            <name>Aantal pagina's in PDF</name>
            <value>1</value>
            <sku/>
            <option_id>2686</option_id>
         </custom_option>
      </custom_options>
   </item>
   <item>
      <qty_ordered>2.0000</qty_ordered>
      <custom_options>
         <custom_option>
            <name>Aantal pagina's in PDF - Vol 2</name>
            <value>3</value>
            <sku/>
            <option_id>2687</option_id>
         </custom_option>
      </custom_options>
   </item>
</items>

Результатом этого является ...

<result>11</result>

EDIT: немного сложно объяснить, как интегрировать это с вашим существующим кодом, потому что вы недостаточно показали свой существующий XSLT

Но где вы сейчас это делаете ...

 <xsl:value-of 
select="sum(objects/object/items/item[not(product_type='configurable' and 
count(custom_options/custom_option[option_id='2686']) &gt; 
0)]/custom_options/custom_option[option_id='2686']/value)" />

Вы, вероятно, захотите изменить его на это ...

<xsl:variable name="items">
  <xsl:for-each select="objects/object/items/item[not(product_type='configurable' and count(custom_options/custom_option[option_id='2686']) &gt; 0)]">
    <item>
      <xsl:value-of select="qty_ordered * custom_options/custom_option[option_id='2686']/value" />
    </item>
  </xsl:for-each>
</xsl:variable>
<xsl:value-of select="sum(exslt:node-set($items)/item)" />
XML, XSLT,
Похожие вопросы
Яндекс.Метрика