Как я могу использовать правильную функцию Max в моем коде? - PullRequest
0 голосов
/ 08 мая 2019

Goodmorning,

У меня в коде одни и те же узлы, и все они получили другие проценты ... Я просто хочу узел с наибольшим процентом.Я не могу понять мой код правильно.Есть ли способ использовать функцию max на этом?

<xsl:template match="/">
  <xsl:for-each select="/x:Invoice/cac:InvoiceLine/cac:TaxTotal/cac:TaxSubtotal/cac:TaxCategory">
     <xsl:choose>
    <xsl:when test="count(cbc:Percent) = 1">
        <xsl:value-of select="format-number(cbc:Percent,'00')"/>
    </xsl:when>
    <xsl:otherwise>
          <xsl:value-of select="21"/>
    </xsl:otherwise>
</xsl:choose>
  </xsl:for-each>
</xsl:template>

Я попробовал код выше.Теперь я получаю результат 0021212121. Таким образом, код выбирает все поля в cbc: Percent.

<InvoiceLine>
<ID>1</ID>
<InvoicedQuantity/>
<LineExtensionAmount currencyID="EUR">0.00</LineExtensionAmount>
<OrderLineReference>
<LineID>1</LineID>
<OrderReference>
<ID>351450.27</ID>
</OrderReference>
</OrderLineReference>
<TaxTotal>
<TaxAmount currencyID="EUR">0.00</TaxAmount>
<TaxSubtotal>
<TaxableAmount currencyID="EUR">0.00</TaxableAmount>
<TaxAmount currencyID="EUR">0.00</TaxAmount>
<TaxCategory>
<ID>NA</ID>
<Percent>0</Percent>
<TaxScheme/>
</TaxCategory>
</TaxSubtotal>
</TaxTotal>
<Item>
<Description>685000 / 08.0005 /filiaal: 2666 / ref1: 
 `351450.27</Description>`
<SellersItemIdentification>
<ID/>
</SellersItemIdentification>
</Item>
<Price>
<PriceAmount currencyID="EUR">0.00</PriceAmount>
<BaseQuantity>1</BaseQuantity>
</Price>
</InvoiceLine>
<InvoiceLine>
<ID>2</ID>
<InvoicedQuantity>2</InvoicedQuantity>
<LineExtensionAmount currencyID="EUR">19.76</LineExtensionAmount>
<OrderLineReference>
<LineID>2</LineID>
<OrderReference>
<ID>351450.27</ID>
</OrderReference>
</OrderLineReference>
<TaxTotal>
<TaxAmount currencyID="EUR">4.15</TaxAmount>
<TaxSubtotal>
<TaxableAmount currencyID="EUR">19.76</TaxableAmount>
<TaxAmount currencyID="EUR">4.15</TaxAmount>
<TaxCategory>
<ID>Excluding</ID>
<Percent>21</Percent>
<TaxScheme/>
</TaxCategory>
</TaxSubtotal>
</TaxTotal>
<Item>
<Description>BLABLA</Description>
<SellersItemIdentification>
<ID>96184323</ID>
</SellersItemIdentification>
</Item>
<Price>
<PriceAmount currencyID="EUR">9.88</PriceAmount>
<BaseQuantity>1</BaseQuantity>
</Price>
</InvoiceLine>
<InvoiceLine>
<ID>3</ID>
<InvoicedQuantity>10</InvoicedQuantity>
<LineExtensionAmount currencyID="EUR">12.00</LineExtensionAmount>
<OrderLineReference>
<LineID>3</LineID>
<OrderReference>
<ID>351450.27</ID>
</OrderReference>
</OrderLineReference>
<TaxTotal>
<TaxAmount currencyID="EUR">2.52</TaxAmount>
<TaxSubtotal>
<TaxableAmount currencyID="EUR">12.00</TaxableAmount>
<TaxAmount currencyID="EUR">2.52</TaxAmount>
<TaxCategory>
<ID>Excluding</ID>
<Percent>21</Percent>
<TaxScheme/>
</TaxCategory>
</TaxSubtotal>
</TaxTotal>
<Item>
<Description>KONS. 2H LICHT D37</Description>
<SellersItemIdentification>
<ID>7040237023</ID>
</SellersItemIdentification>
</Item>
<Price>
<PriceAmount currencyID="EUR">3.39</PriceAmount>
<BaseQuantity>1</BaseQuantity>
</Price>
</InvoiceLine>
<InvoiceLine>
<ID>4</ID>
<InvoicedQuantity>10</InvoicedQuantity>
<LineExtensionAmount currencyID="EUR">44.10</LineExtensionAmount>
<OrderLineReference>
<LineID>4</LineID>
<OrderReference>
<ID>351450.27</ID>
</OrderReference>
</OrderLineReference>
<TaxTotal>
<TaxAmount currencyID="EUR">9.26</TaxAmount>
<TaxSubtotal>
<TaxableAmount currencyID="EUR">44.10</TaxableAmount>
<TaxAmount currencyID="EUR">9.26</TaxAmount>
<TaxCategory>
<ID>Excluding</ID>
<Percent>21</Percent>
<TaxScheme/>
</TaxCategory>
</TaxSubtotal>
</TaxTotal>
<Item>
<Description>blabla</Description>
<SellersItemIdentification>
<ID>7041037023</ID>
</SellersItemIdentification>
</Item>
<Price>
<PriceAmount currencyID="EUR">12.37</PriceAmount>
<BaseQuantity>1</BaseQuantity>
</Price>
</InvoiceLine>
<InvoiceLine>
<ID>5</ID>
<InvoicedQuantity>1</InvoicedQuantity>
<LineExtensionAmount currencyID="EUR">25.00</LineExtensionAmount>
<OrderLineReference>
<LineID>6</LineID>
<OrderReference>
<ID>351450.27</ID>
</OrderReference>
</OrderLineReference>
<TaxTotal>
<TaxAmount currencyID="EUR">5.25</TaxAmount>
<TaxSubtotal>
<TaxableAmount currencyID="EUR">25.00</TaxableAmount>
<TaxAmount currencyID="EUR">5.25</TaxAmount>
<TaxCategory>
<ID>Excluding</ID>
<Percent>21</Percent>
<TaxScheme/>
</TaxCategory>
</TaxSubtotal>
</TaxTotal>
<Item>
<Description>blabla</Description>
<SellersItemIdentification>
<ID>VRACHT</ID>
</SellersItemIdentification>
</Item>
<Price>
<PriceAmount currencyID="EUR">25.00</PriceAmount>
<BaseQuantity>1</BaseQuantity>
</Price>
</InvoiceLine>

В этом коде самый высокий процент равен 21, поэтому я просто хочу 21 как результат, а не все результатыв узлах .. Может кто-нибудь помочь мне с кодом, пожалуйста ??

Ответы [ 2 ]

0 голосов
/ 08 мая 2019

Поскольку это не подходит для комментариев, я бы реорганизовал решение следующим образом:

<xsl:template match="/">
  <xsl:variable 
     name="vTaxCategory"
     select="/x:Invoice/cac:InvoiceLine/cac:TaxTotal/cac:TaxSubtotal/cac:TaxCategory"/>
  <xsl:variable 
     name="vTaxCategoryWithNoPercent"
     select="$vTaxCategory[not(cbc:Percent)]"/>
  <xsl:for-each select="$vTaxCategory/cbc:Percent">
    <xsl:sort data-type="number" order="descending" />
    <xsl:if test="position() = 1">
      <xsl:choose>
        <xsl:when test="$vTaxCategoryWithNoPercent and 21 > . ">21</xsl:when>
        <xsl:otherwise>
          <xsl:value-of select="format-number(cbc:Percent,'00')"/>
        </xsl:otherwise>
      </xsl:choose>
    </xsl:if>
  </xsl:for-each>
</xsl:template>

Просто получите максимум, а затем замените его в случае отсутствия Percent и его уменьшениячем 21.

0 голосов
/ 08 мая 2019

Я думаю, что вы можете сделать это без функции расширения.Ваш текущий код, похоже, предполагает, что вы можете иметь более одного Percent (или, возможно, вообще никакого).Если это так, попробуйте этот шаблон

<xsl:template match="/">
  <xsl:for-each select="/x:Invoice/cac:InvoiceLine/cac:TaxTotal/cac:TaxSubtotal/cac:TaxCategory">
    <xsl:sort select="cbc:Percent * (count(cbc:Percent) = 1) + 21 * (1 - (count(cbc:Percent) = 1))" order="descending" />
    <xsl:if test="position() = 1">
      <xsl:choose>
        <xsl:when test="count(cbc:Percent) = 1">
          <xsl:value-of select="format-number(cbc:Percent,'00')"/>
        </xsl:when>
        <xsl:otherwise>
          <xsl:value-of select="21"/>
        </xsl:otherwise>
      </xsl:choose>
    </xsl:if>
  </xsl:for-each>
</xsl:template>

Если бы у вас был когда-либо только ноль или один процент, вы могли бы упростить его до этого ...

<xsl:sort select="cbc:Percent * count(cbc:Percent) + 21 * count(cbc:Percent)" order="descending" />

И, конечно, есливсе узлы всегда имели один Percent, вы могли бы просто сделать это ....

<xsl:sort select="cbc:Percent" />
...