powered by simpleCommunicator - 2.0.31     © 2024 Programmizd 02
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / выбрать первое ненулевое значение в select
2 сообщений из 2, страница 1 из 1
выбрать первое ненулевое значение в select
    #39708909
evgen29
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте!
Есть к примеру такой кусок xml:
Код: xml
1.
2.
3.
4.
5.
6.
<prices>
<vat>10</vat>
<qty>2</qty>
<pricewvat>10</pricewvat>
<pricewovat></pricewovat>
<prices>



т.е. в элементе prices НДС,кол-во, цена без ндс и цена с ндс.
к примеру мне надо расчитать сумму с ндс. Я могу посчитать ее как цена с ндс*кол-во, а могу как цена без ндс*(1+ндс/100)*кол-во
Цена с Ндс или цена без ндс может отсутствовать или быть незаполненной.
соответственно мне надо создать узел сумма с ндс внутри элемента prices,к примеру sumwvat, если он отсутствует и рассчитать его значение как одна из формул, которая будет непустой, т.е. либо pricewvat*qty, либо pricewovat*(1+vat div 100)*qty, соответственно,если тег sumwvat будет присутствовать и будет непустой, то оставить его как есть.
При этом на выходе должен остаться тот же xml, что и на входе, за исключением расчета узла суммы с ндс.

я думал что-то в этом роде должно быть(по крайней мере для xsl 2.0):
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
<xsl:choose>
  <xsl:when test="not(prices/sumwvat)">
    <sumwvat>
       <xsl:value-of select="(pricewvat*qty , pricewovat*(1+vat div 100)*qty)[1]">
    </sumwvat>
  </xsl:when>
  <xsl:otherwise>
      <sumwvat>
        <xsl:value-of select="(text(),pricewvat*qty , pricewovat*(1+vat div 100)*qty)[1]">
      </sumwvat>
  </xsl:otherwise>
</xsl:choose>
...
Рейтинг: 0 / 0
выбрать первое ненулевое значение в select
    #39709327
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
<xsl:template match="prices">
  <prices>
    <xsl:copy-of select="*"/>
    <xsl:if test="sumwvat != ''">
      <sumwvat>
        <xsl:choose>
          <xsl:when test="pricewvat != ''">
             <xsl:value-of select="pricewvat * qty"/>
          </xsl:when>
          <xsl:otherwise>
             <xsl:value-of select="pricewovat * (1 + vat div 100) * qty"/>
          </xsl:otherwise>
        </xsl:choose>
      </sumwvat>
    </xsl:if>
  </prices>
</xsl:template>
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / выбрать первое ненулевое значение в select
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]