Как исправить проблему с вычитаемой позицией, группируя по какой-то позиции - PullRequest
0 голосов
/ 24 мая 2019

В моем конвертере xslt я должен вычесть некоторые позиции из одного счета и показать их в группе. Я не знаю, как я могу это сделать. Теперь у меня есть xslt, который дает мне результат в отдельной позиции.

<Invoice>
    <P_1>2019.04.30</P_1>
    <P_2>FV_0660/E/2019</P_2>
    <P_3>Client</P_3>
    <P_4>Client Adress</P_4>
    <P_5>3570.9200</P_5>
    <P_6>821.3100</P_6>
    <P_7>4392.23</P_7>
</Invoice>
<InvoiceRecord typ="G">
    <P_8>FV_0660/E/2019</P_8>
    <P_9>Position1</P_9>
    <P_10>1707.10</P_10>
    <P_11>2099.73</P_11>
</InvoiceRecord>
<InvoiceRecord typ="G">
    <P_8>FV_0660/E/2019</P_8>
    <P_9>Position2 variable</P_9>
    <P_10>143.61</P_10>
    <P_11>176.64</P_11>
</InvoiceRecord>
<InvoiceRecord typ="G">
    <P_8>FV_0660/E/2019</P_8>
    <P_9>Position3</P_9>
    <P_10>0.00</P_10>
    <P_11>0.00</P_11>
</InvoiceRecord>
<InvoiceRecord typ="G">
    <P_8>FV_0660/E/2019</P_8>
    <P_9>Position4</P_9>
    <P_10>1086.47</P_10>
    <P_11>1336.36</P_11>
</InvoiceRecord>
<InvoiceRecord typ="G">
    <P_8>FV_0660/E/2019</P_8>
    <P_9>Position5 variable</P_9>
    <P_10>103.46</P_10>
    <P_11>127.26</P_11>
</InvoiceRecord>
<InvoiceRecord typ="G">
    <P_8>FV_0660/E/2019</P_8>
    <P_9>Position6</P_9>
    <P_10>384.38</P_10>
    <P_11>472.79</P_11>
</InvoiceRecord>
<InvoiceRecord typ="G">
    <P_8>FV_0660/E/2019</P_8>
    <P_9>Position7 variable</P_9>
    <P_10>32.34</P_10>
    <P_11>39.78</P_11>
</InvoiceRecord>
<InvoiceRecord typ="G">
    <P_8>FV_0660/E/2019</P_8>
    <P_9>Position8</P_9>
    <P_10>9.87</P_10>
    <P_11>12.14</P_11>
</InvoiceRecord>
<InvoiceRecord typ="G">
    <P_8>FV_0660/E/2019</P_8>
    <P_9>Position9</P_9>
    <P_10>103.69</P_10>
    <P_11>127.54</P_11>
</InvoiceRecord>

Теперь я получаю результат

 Position1 1707.10
 Position2 variable 143.61 etc.

Результат, который мне нужен, такой:

Positions 3291.51
PositionsV 279.41

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

1 Ответ

1 голос
/ 24 мая 2019

С учетом правильно сформированного ввода, такого как:

XML

<input>
    <Invoice>
        <P_1>2019.04.30</P_1>
        <P_2>FV_0660/E/2019</P_2>
        <P_3>Client</P_3>
        <P_4>Client Adress</P_4>
        <P_5>3570.9200</P_5>
        <P_6>821.3100</P_6>
        <P_7>4392.23</P_7>
    </Invoice>
    <InvoiceRecord typ="G">
        <P_8>FV_0660/E/2019</P_8>
        <P_9>Position1</P_9>
        <P_10>1707.10</P_10>
        <P_11>2099.73</P_11>
    </InvoiceRecord>
    <InvoiceRecord typ="G">
        <P_8>FV_0660/E/2019</P_8>
        <P_9>Position2 variable</P_9>
        <P_10>143.61</P_10>
        <P_11>176.64</P_11>
    </InvoiceRecord>
    <InvoiceRecord typ="G">
        <P_8>FV_0660/E/2019</P_8>
        <P_9>Position3</P_9>
        <P_10>0.00</P_10>
        <P_11>0.00</P_11>
    </InvoiceRecord>
    <InvoiceRecord typ="G">
        <P_8>FV_0660/E/2019</P_8>
        <P_9>Position4</P_9>
        <P_10>1086.47</P_10>
        <P_11>1336.36</P_11>
    </InvoiceRecord>
    <InvoiceRecord typ="G">
        <P_8>FV_0660/E/2019</P_8>
        <P_9>Position5 variable</P_9>
        <P_10>103.46</P_10>
        <P_11>127.26</P_11>
    </InvoiceRecord>
    <InvoiceRecord typ="G">
        <P_8>FV_0660/E/2019</P_8>
        <P_9>Position6</P_9>
        <P_10>384.38</P_10>
        <P_11>472.79</P_11>
    </InvoiceRecord>
    <InvoiceRecord typ="G">
        <P_8>FV_0660/E/2019</P_8>
        <P_9>Position7 variable</P_9>
        <P_10>32.34</P_10>
        <P_11>39.78</P_11>
    </InvoiceRecord>
    <InvoiceRecord typ="G">
        <P_8>FV_0660/E/2019</P_8>
        <P_9>Position8</P_9>
        <P_10>9.87</P_10>
        <P_11>12.14</P_11>
    </InvoiceRecord>
    <InvoiceRecord typ="G">
        <P_8>FV_0660/E/2019</P_8>
        <P_9>Position9</P_9>
        <P_10>103.69</P_10>
        <P_11>127.54</P_11>
    </InvoiceRecord>
</input>

следующей таблицы стилей:

XSLT 1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

<xsl:template match="/input">
    <output>
        <positions>
            <xsl:value-of select="sum(InvoiceRecord[not(contains(P_9, 'variable'))]/P_10)"/>
        </positions>
        <positionsV>
            <xsl:value-of select="sum(InvoiceRecord[contains(P_9, 'variable')]/P_10)"/>
        </positionsV>
    </output>
</xsl:template>

</xsl:stylesheet>

вернет:

Результат

<?xml version="1.0" encoding="UTF-8"?>
<output>
  <positions>3291.51</positions>
  <positionsV>279.41</positionsV>
</output>
...