ThomasM: XSLT 1.0 Sum

Beitrag lesen

Hallo Julian,

wie kann ich den Inhalt unter "AllowanceOrCharge_Header_002/Amount" summieren und anschließend das "_002" entfernen? Es darf dann das Element "AllowanceOrCharge_Header_002" nicht mehr im XML ausgegeben werden.

Dem XML fehlt zunächst </LineInformation> zur Wohlgeformtheit und damit Transformierbarkeit.

Unter der Annahme, dass alle Inhalte außer Amount jeweils identisch sind, ergibt das die gesuchte Ausgabe. Aber vermutlich gibt es wieder abstruse nicht genannte Spezialfälle. 😉

<?xml version="1.0" encoding="UTF-8"?>
<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="@* | node()">
    <xsl:copy>
      <xsl:apply-templates select="@* | node()"/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="HeaderInformation">
    <HeaderInformation>
      <AllowanceOrCharge_Header>
        <xsl:copy-of select="AllowanceOrCharge_Header_002[1]/CalculationLevel"/>
        <xsl:copy-of select="AllowanceOrCharge_Header_002[1]/Qualifier"/>
        <xsl:copy-of select="AllowanceOrCharge_Header_002[1]/Code"/>
        <Amount>
          <xsl:value-of select="format-number(sum(//AllowanceOrCharge_Header_002[Code = 'FI']/Amount), '#.00')"/>
        </Amount>
      </AllowanceOrCharge_Header>
    </HeaderInformation>
  </xsl:template>

</xsl:stylesheet>

Offenbar sollen es nicht vier Nachkommastellen sein, von daher #.00 gesetzt.

Grüße,
Thomas