Hallo.
Ich möchte aus einem XML-File und einem XSL-File ein HTML-File generieren.
Ich persönlich habe eher wenig Erfahrung in diesem Gebiet, habe aber die Vorgabe meines Chefs hier den Fehler zu finden.
Wäre echt toll, wenn sich jemand die 2 Files anschauen und mir helfen könnte.
Das Ergebnis soll eine Rechnung eines Unternehmens darstellen. Ich habe die 2 Files auch angehängt^^
Danke schon mal im Voraus!
P.S.: Die Files sind txt-Files, da es nicht möglich ist xsl oder xml - Files hochzuladen.
XML:
Code:
<?xml version="1.0" encoding="UTF-8"?>
<eb:Invoice eb:DocumentType="Invoice" eb:GeneratingSystem="none" eb:InvoiceCurrency="EUR" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#" xmlns:eb="http://www.ebinterface.at/schema/3p0/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.ebinterface.at/schema/3p0/ http://www.ebinterface.at/schema/3p0/Invoice.xsd ">
<eb:InvoiceNumber>39</eb:InvoiceNumber>
<eb:InvoiceDate>2011-04-29</eb:InvoiceDate>
<eb:Biller>
<eb:VATIdentificationNumber>ATU57910728</eb:VATIdentificationNumber>
<eb:Address>
<eb:Salutation>Firma</eb:Salutation>
<eb:Name>GmbH </eb:Name>
<eb:Street>Test Straße</eb:Street>
<eb:Town>Test Stadt</eb:Town>
<eb:ZIP>6666</eb:ZIP>
<eb:Country>Österreich</eb:Country>
<eb:Phone>+00 000 00000</eb:Phone>
<eb:Email>Testmail@test.at</eb:Email>
<eb:Contact>Max Mustermann</eb:Contact>
</eb:Address>
</eb:Biller>
<eb:InvoiceRecipient>
<eb:VATIdentificationNumber/>
<eb:BillersInvoiceRecipientID>12</eb:BillersInvoiceRecipientID>
<eb:Address>
<eb:Salutation/>
<eb:Name>Kassenkunde </eb:Name>
<eb:Street> </eb:Street>
<eb:Town/>
<eb:ZIP>_________________________________</eb:ZIP>
<eb:Country>_________________________________</eb:Country>
<eb:Contact/>
</eb:Address>
</eb:InvoiceRecipient>
<eb:Details>
<eb:HeaderDescription>Wir erlauben uns wie folgt zu verrechnen</eb:HeaderDescription>
<eb:ItemList>
<eb:ListLineItem>
<eb:PositionNumber>1</eb:PositionNumber>
<eb:Description>Test GmbH</eb:Description>
<eb:Quantity eb:Unit="Pauschale">2.0</eb:Quantity>
<eb:UnitPrice>49.90</eb:UnitPrice>
<eb:TaxRate>20.0</eb:TaxRate>
<eb:AdditionalInformation>
<eb:SerialNumber>49.9</eb:SerialNumber>
<eb:Classification>Keine Steuer</eb:Classification>
<eb:Size>49.9</eb:Size>
<eb:Weight eb:Unit="Units">0.0</eb:Weight>
</eb:AdditionalInformation>
<eb:LineItemAmount>2.00</eb:LineItemAmount>
</eb:ListLineItem>
<eb:ListLineItem>
<eb:PositionNumber>2</eb:PositionNumber>
<eb:Description>Test GmbH</eb:Description>
<eb:Quantity eb:Unit="Pauschale">5.0</eb:Quantity>
<eb:UnitPrice>49.90</eb:UnitPrice>
<eb:TaxRate>20.0</eb:TaxRate>
<eb:AdditionalInformation>
<eb:SerialNumber>49.9</eb:SerialNumber>
<eb:Classification>Keine Steuer</eb:Classification>
<eb:Size>49.9</eb:Size>
<eb:Weight eb:Unit="Units">0.0</eb:Weight>
</eb:AdditionalInformation>
<eb:LineItemAmount>5.00</eb:LineItemAmount>
</eb:ListLineItem>
</eb:ItemList>
<eb:FooterDescription>Wir danken für Ihren Auftrag!</eb:FooterDescription>
<eb:FooterDescription>Wir danken für Ihren Auftrag!</eb:FooterDescription>
</eb:Details>
<eb:Tax>
<eb:VAT>
<eb:Item>
<eb:TaxedAmount>349.30</eb:TaxedAmount>
<eb:TaxRate>20.0</eb:TaxRate>
<eb:Amount>69.86</eb:Amount>
</eb:Item>
</eb:VAT>
<eb:OtherTax>
<eb:Comment>Keine Steuer</eb:Comment>
<eb:Amount>0.0</eb:Amount>
</eb:OtherTax>
<eb:OtherTax>
<eb:Comment>Keine Steuer</eb:Comment>
<eb:Amount>0.0</eb:Amount>
</eb:OtherTax>
</eb:Tax>
<eb:TotalGrossAmount>419.16</eb:TotalGrossAmount>
<eb:PaymentMethod xsi:type="eb:UniversalBankTransactionType">
<eb:BeneficiaryAccount>
<eb:BankName>Bankname</eb:BankName>
<eb:BankCode eb:BankCodeType="AF">0</eb:BankCode>
<eb:BIC>0</eb:BIC>
<eb:BankAccountNr>0</eb:BankAccountNr>
<eb:IBAN>0</eb:IBAN>
<eb:BankAccountOwner>Max Mustermann</eb:BankAccountOwner>
</eb:BeneficiaryAccount>
</eb:PaymentMethod>
<eb:PaymentConditions>
<eb:DueDate>2011-04-29</eb:DueDate>
</eb:PaymentConditions>
<eb:PresentationDetails>
<eb:URL>www.google.at</eb:URL>
<eb:LogoURL>/daten/transformations/client_5/files/</eb:LogoURL>
<eb:LayoutID>0100</eb:LayoutID>
</eb:PresentationDetails>
</eb:Invoice>
XSLT:
Code:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.1"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format"
xmlns:ext="http://xml.apache.org/xalan/java/eu.gumpinger.erp.helper.XsltExtension"
exclude-result-prefixes="fo">
<xsl:output method="xml" version="1.0" omit-xml-declaration="no"
indent="yes" />
<xsl:template match="/">
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
<fo:layout-master-set>
<fo:simple-page-master master-name="simpleA4"
page-height="29.7cm" page-width="21cm" margin-top="0cm"
margin-bottom="0cm" margin-left="2.5cm" margin-right="2.5cm">
<fo:region-body>
</fo:region-body>
<fo:region-before extent="10cm" region-name="region-before"></fo:region-before>
<fo:region-after extent="4cm" region-name="region-after"></fo:region-after>
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence master-reference="simpleA4">
<xsl:variable name="locale" select="Invoice/Custom/Locale" />
<xsl:variable name="newline">
<xsl:text> </xsl:text>
</xsl:variable>
<fo:static-content flow-name="region-before">
<xsl:variable name="path">
<xsl:value-of select="Invoice/Custom/LogoURL2" />
</xsl:variable>
<fo:block space-before="0.75cm" text-align="right">
<fo:external-graphic>
<xsl:attribute name="src">
<xsl:value-of select="$path" />
</xsl:attribute>
</fo:external-graphic>
</fo:block>
</fo:static-content>
<xsl:if test="Invoice/@DocumentType = 'Invoice' or Invoice/@DocumentType = 'CreditMemo'">
<fo:static-content flow-name="region-after">
<fo:block font-size="8pt" text-align="center">
<xsl:value-of select="ext:getString('Invoice.Footer.PaymentTerms', $locale)" />
</fo:block>
<fo:block font-size="8pt">
<xsl:value-of select="ext:format(ext:getString('Invoice.Footer.DueDateText', $locale), ext:formatDate(Invoice/PaymentConditions/DueDate, $locale), ext:diffInDays(Invoice/PaymentConditions/DueDate, Invoice/InvoiceDate))" />
<xsl:value-of select="$newline" />
<xsl:value-of select="ext:format(ext:getString('Invoice.Footer.PaymentText', $locale), Invoice/PaymentMethod/BeneficiaryAccount/BankAccountNr, Invoice/PaymentMethod/BeneficiaryAccount/BankAccountOwner, Invoice/PaymentMethod/BeneficiaryAccount/BankName, Invoice/PaymentMethod/BeneficiaryAccount/BankCode)" />
<xsl:value-of select="$newline" />
<xsl:choose>
<xsl:when test="Invoice/PaymentConditions/Discount">
<xsl:value-of select="ext:format(ext:getString('Invoice.Footer.DiscountText', $locale), ext:diffInDays(Invoice/PaymentConditions/DueDate, Invoice/PaymentConditions/Discount/PaymentDate), Invoice/PaymentConditions/Discount/Percentage, Invoice/PaymentConditions/Discount/Amount, Invoice/@InvoiceCurrency)" />
<xsl:value-of select="$newline" />
</xsl:when>
</xsl:choose>
<xsl:value-of select="ext:format(ext:getString('Invoice.Footer.UIDText', $locale), Invoice/Biller/VATIdentificationNumber)" />
</fo:block>
</fo:static-content>
</xsl:if>
<fo:flow flow-name="xsl-region-body">
<fo:block space-before="2.5cm"></fo:block>
<fo:block font-size="11pt" space-before="0.5cm">
<fo:block text-align="center" font-size="16pt" font-weight="bold">
<xsl:value-of select="ext:getString(concat('Invoice.InvoiceType.', Invoice/@DocumentType), $locale)" />
</fo:block>
<fo:block>
<xsl:value-of select="Invoice/Biller/Address/Salutation" />
</fo:block>
<fo:block>
<xsl:value-of select="Invoice/Biller/Address/Name" />
</fo:block>
<fo:block>
<xsl:value-of select="Invoice/Biller/Address/Street" />
</fo:block>
<fo:block>
<xsl:value-of select="Invoice/Biller/Address/ZIP" />
<xsl:value-of select="$newline" />
<xsl:value-of select="Invoice/Biller/Address/Town" />,
<xsl:value-of select="$newline" />
<xsl:value-of select="Invoice/Biller/Address/Country" />
</fo:block>
<fo:block>
<xsl:value-of select="Invoice/Biller/Address/Phone" />
</fo:block>
<fo:block space-before="1cm"></fo:block>
<fo:table table-layout="fixed">
<fo:table-column column-width="8.5cm" />
<fo:table-column column-width="8cm" />
<fo:table-body>
<fo:table-row keep-with-next="always">
<fo:table-cell>
<fo:block font-weight="bold">
<xsl:choose>
<xsl:when test="Invoice/@DocumentType = 'CreditMemo'">
<xsl:value-of select="ext:getString('Invoice.Header.CreditTo', $locale)" />
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="ext:getString('Invoice.Header.InvoiceTo', $locale)" />
</xsl:otherwise>
</xsl:choose>
</fo:block>
<fo:block>
<xsl:value-of select="Invoice/InvoiceRecipient/Address/Salutation" />
</fo:block>
<fo:block>
<xsl:value-of select="Invoice/InvoiceRecipient/Address/Name" />
</fo:block>
<fo:block>
<xsl:value-of select="Invoice/InvoiceRecipient/Address/Street" />
</fo:block>
<fo:block>
<xsl:value-of select="Invoice/InvoiceRecipient/Address/ZIP" />
<xsl:value-of select="$newline" />
<xsl:value-of select="Invoice/InvoiceRecipient/Address/Town" />
</fo:block>
<fo:block>
<xsl:value-of select="Invoice/InvoiceRecipient/Address/Phone" />
</fo:block>
</fo:table-cell>
<fo:table-cell>
<fo:block text-align="left" font-weight="bold">
<xsl:choose>
<xsl:when test="Invoice/@DocumentType = 'CreditMemo'">
<xsl:value-of select="ext:format(ext:getString('Invoice.Header.CreditDate', $locale), ext:formatDate(Invoice/InvoiceDate, $locale))" />
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="ext:format(ext:getString('Invoice.Header.InvoiceDate', $locale), ext:formatDate(Invoice/InvoiceDate, $locale))" />
</xsl:otherwise>
</xsl:choose>
</fo:block>
<fo:block text-align="left" font-weight="bold">
<xsl:value-of select="ext:format(ext:getString('Invoice.Header.DeliveryDate', $locale), ext:formatDate(Invoice/Delivery/Date, $locale))" />
</fo:block>
<fo:block text-align="left" font-weight="bold">
<xsl:choose>
<xsl:when test="Invoice/@DocumentType = 'CreditMemo'">
<xsl:value-of select="ext:format(ext:getString('Invoice.Header.CreditNo', $locale), Invoice/InvoiceNumber)" />
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="ext:format(ext:getString('Invoice.Header.InvoiceNo', $locale), Invoice/InvoiceNumber)" />
</xsl:otherwise>
</xsl:choose>
</fo:block>
<xsl:if test="Invoice/@DocumentType = 'FinalSettlement' or Invoice/@DocumentType = 'InvoiceForAdvancePayment' or Invoice/@DocumentType = 'InvoiceForPartialDelivery'">
<fo:block text-align="left" font-weight="bold">
<xsl:value-of select="ext:format(ext:getString('Invoice.Header.OriginalInvoiceNo', $locale), Invoice/Custom/ParentInvoice)" />
</fo:block>
</xsl:if>
</fo:table-cell>
</fo:table-row>
</fo:table-body>
</fo:table>
<fo:block space-before="0.5cm">
<xsl:value-of select="Invoice/Details/HeaderDescription" />
</fo:block>
<fo:block space-before="0.5cm"></fo:block>
<xsl:variable name="discountShown">
<xsl:choose>
<xsl:when test="sum(Invoice/Details/ItemList/ListLineItem/ReductionRate) > 0">1</xsl:when>
<xsl:otherwise>0</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:if test="Invoice/@DocumentType = 'FinalSettlement'">
<fo:block space-before="0.3cm" space-after="0.2cm">
<xsl:value-of select="ext:getString('Invoice.OriginalInvoiceLines', $locale)" />
</fo:block>
</xsl:if>
<fo:table table-layout="fixed" font-size="9pt">
<fo:block space-before="0.2cm"></fo:block>
<xsl:if test="Invoice/Custom/ShownColumns/Pos">
<fo:table-column column-width="1.5cm" /> <!-- fixed -->
</xsl:if>
<fo:table-column column-width="proportional-column-width(4)" />
<xsl:if test="Invoice/Custom/ShownColumns/UnitPrice">
<fo:table-column column-width="proportional-column-width(2.5)" />
</xsl:if>
<xsl:if test="$discountShown = 1 and Invoice/Custom/ShownColumns/ReductionRate">
<fo:table-column column-width="proportional-column-width(2)" />
</xsl:if>
<xsl:if test="Invoice/Custom/ShownColumns/Quantity">
<fo:table-column column-width="proportional-column-width(2)" />
</xsl:if>
<xsl:if test="Invoice/Custom/ShownColumns/TaxRate">
<fo:table-column column-width="proportional-column-width(2)" />
</xsl:if>
<fo:table-column column-width="2cm" /> <!-- fixed -->
<fo:table-header>
<fo:table-row>
<xsl:if test="Invoice/Custom/ShownColumns/Pos">
<fo:table-cell border-width="0.5px" border-style="solid" padding="1px">
<fo:block text-align="center" font-weight="bold">
<xsl:value-of select="ext:getString('Invoice.TableHeader.No', $locale)" />
</fo:block>
</fo:table-cell>
</xsl:if>
<fo:table-cell border-width="0.5px" border-style="solid" padding="1px">
<fo:block text-align="center" font-weight="bold">
<xsl:value-of select="ext:getString('Invoice.TableHeader.Description', $locale)" />
</fo:block>
</fo:table-cell>
<xsl:if test="Invoice/Custom/ShownColumns/UnitPrice">
<fo:table-cell border-width="0.5px" border-style="solid" padding="1px">
<fo:block text-align="center" font-weight="bold">
<xsl:value-of select="ext:getString('Invoice.TableHeader.SalesPrice', $locale)" />
</fo:block>
</fo:table-cell>
</xsl:if>
<xsl:if test="$discountShown = 1 and Invoice/Custom/ShownColumns/ReductionRate">
<fo:table-cell border-width="0.5px" border-style="solid" padding="1px">
<fo:block text-align="center" font-weight="bold">
<xsl:value-of select="ext:getString('Invoice.TableHeader.Reduction', $locale)" />
</fo:block>
</fo:table-cell>
</xsl:if>
<xsl:if test="Invoice/Custom/ShownColumns/Quantity">
<fo:table-cell border-width="0.5px" border-style="solid" padding="1px">
<fo:block text-align="center" font-weight="bold">
<xsl:value-of select="ext:getString('Invoice.TableHeader.Quantity', $locale)" />
</fo:block>
</fo:table-cell>
</xsl:if>
<xsl:if test="Invoice/Custom/ShownColumns/TaxRate">
<fo:table-cell border-width="0.5px" border-style="solid" padding="1px">
<fo:block text-align="center" font-weight="bold">
<xsl:value-of select="ext:getString('Invoice.TableHeader.Tax', $locale)" />
</fo:block>
</fo:table-cell>
</xsl:if>
<fo:table-cell border-width="0.5px" border-style="solid" padding="1px">
<fo:block text-align="center" font-weight="bold">
<xsl:value-of select="ext:getString('Invoice.TableHeader.Price', $locale)" />
</fo:block>
</fo:table-cell>
</fo:table-row>
</fo:table-header>
<fo:table-body>
<xsl:for-each select="Invoice/Details/ItemList/ListLineItem">
<fo:table-row keep-with-next="always">
<xsl:if test="//Invoice/Custom/ShownColumns/Pos">
<fo:table-cell border-width="0.5px" border-style="solid" padding="1px">
<xsl:choose>
<xsl:when test="PositionNumber">
<fo:block text-align="center">
<xsl:value-of select="PositionNumber" />
</fo:block>
</xsl:when>
</xsl:choose>
</fo:table-cell>
</xsl:if>
<fo:table-cell border-width="0.5px" border-style="solid" padding="1px">
<xsl:choose>
<xsl:when test="Description">
<fo:block text-align="center">
<xsl:value-of select="Description" />
</fo:block>
</xsl:when>
</xsl:choose>
</fo:table-cell>
<xsl:if test="//Invoice/Custom/ShownColumns/UnitPrice">
<fo:table-cell border-width="0.5px" border-style="solid" padding="1px">
<xsl:choose>
<xsl:when test="UnitPrice">
<fo:block text-align="center">
<xsl:value-of select="format-number(UnitPrice, '0.00')" />
</fo:block>
</xsl:when>
</xsl:choose>
</fo:table-cell>
</xsl:if>
<xsl:if test="$discountShown = 1 and //Invoice/Custom/ShownColumns/ReductionRate">
<fo:table-cell border-width="0.5px" border-style="solid" padding="1px">
<xsl:choose>
<xsl:when test="ReductionRate">
<fo:block text-align="center">
<xsl:value-of select="format-number(ReductionRate, '0.00')" />
</fo:block>
</xsl:when>
<xsl:otherwise>
<fo:block text-align="center">0.0</fo:block>
</xsl:otherwise>
</xsl:choose>
</fo:table-cell>
</xsl:if>
<xsl:if test="//Invoice/Custom/ShownColumns/Quantity">
<fo:table-cell border-width="0.5px" border-style="solid" padding="1px">
<xsl:choose>
<xsl:when test="Quantity">
<fo:block text-align="center">
<xsl:value-of select="format-number(Quantity, '0.00')" />
</fo:block>
</xsl:when>
</xsl:choose>
</fo:table-cell>
</xsl:if>
<xsl:if test="//Invoice/Custom/ShownColumns/TaxRate">
<fo:table-cell border-width="0.5px" border-style="solid" padding="1px">
<xsl:choose>
<xsl:when test="TaxRate">
<fo:block text-align="center">
<xsl:value-of select="format-number(TaxRate, '0.00')" />
</fo:block>
</xsl:when>
</xsl:choose>
</fo:table-cell>
</xsl:if>
<fo:table-cell border-width="0.5px" border-style="solid" padding="1px">
<fo:block text-align="right">
<xsl:value-of select="format-number(LineItemAmount, '0.00')" />
</fo:block>
</fo:table-cell>
</fo:table-row>
</xsl:for-each>
</fo:table-body>
</fo:table>
<!-- Zwischensumme -->
<fo:table table-layout="fixed" font-size="9pt">
<fo:table-column column-width="8cm" />
<fo:table-column column-width="6cm" />
<fo:table-column column-width="2cm" />
<fo:table-body>
<xsl:if test="Invoice/@DocumentType = 'Invoice' or Invoice/@DocumentType = 'CreditMemo'">
<fo:table-row>
<fo:table-cell>
</fo:table-cell>
<fo:table-cell border-width="0.5px" border-style="solid" padding="1px">
<fo:block text-align="left" font-weight="bold">
<xsl:value-of select="ext:getString('Invoice.TableSummary.NetPrice', $locale)" />
</fo:block>
</fo:table-cell>
<fo:table-cell border-width="0.5px" border-style="solid" padding="1px">
<fo:block text-align="right" font-weight="bold">
<xsl:value-of select="format-number(sum(Invoice/Tax/VAT/Item/TaxedAmount), '0.00')" />
</fo:block>
</fo:table-cell>
</fo:table-row>
<!-- VAT -->
<xsl:for-each select="Invoice/Tax/VAT/Item">
<xsl:choose>
<xsl:when test="TaxRate != 0.0">
<fo:table-row keep-with-next="always">
<fo:table-cell>
</fo:table-cell>
<fo:table-cell border-width="0.5px" border-style="solid" padding="1px">
<fo:block text-align="left">
<xsl:value-of select="ext:format(ext:getString('Invoice.TableSummary.VAT', $locale), format-number(TaxRate, '0'), format-number(TaxedAmount, '0.00'))" />
</fo:block>
</fo:table-cell>
<fo:table-cell border-width="0.5px" border-style="solid" padding="1px">
<fo:block text-align="right">
<xsl:value-of select="format-number(Amount, '0.00')" />
</fo:block>
</fo:table-cell>
</fo:table-row>
</xsl:when>
</xsl:choose>
</xsl:for-each>
</xsl:if>
<!-- Gesamt Summe -->
<fo:table-row keep-with-next="always">
<fo:table-cell>
</fo:table-cell>
<fo:table-cell border-width="0.5px" border-style="solid" padding="1px">
<fo:block text-align="left" font-weight="bold">
<xsl:value-of select="ext:getString('Invoice.TableSummary.GrossPrice', $locale)" />
</fo:block>
</fo:table-cell>
<fo:table-cell border-width="0.5px" border-style="solid" padding="1px">
<fo:block text-align="right">
<xsl:value-of select="format-number(Invoice/TotalGrossAmount, '0.00')" />
</fo:block>
</fo:table-cell>
</fo:table-row>
</fo:table-body>
</fo:table>
<xsl:if test="Invoice/@DocumentType = 'FinalSettlement'">
<fo:block space-before="1cm" text-align="left">
<xsl:variable name="partialInvoices">
<xsl:for-each select="Invoice/Custom/FinalSettlement/PartialInvoices/InvoiceNumber">
<xsl:value-of select="." />,
</xsl:for-each>
</xsl:variable>
<xsl:value-of select="
ext:format( ext:getString('Invoice.SplitInvoicesMessage', $locale),
ext:formatCommaList($partialInvoices, ext:getString('Invoice.And', $locale)),
Invoice/@InvoiceCurrency,
format-number(Invoice/Custom/FinalSettlement/AlreadyPaidAmount, '0.00'),
format-number(Invoice/Custom/FinalSettlement/StillToPayAmount, '0.00'))
" />
</fo:block>
</xsl:if>
<fo:block space-before="1.5cm" font-weight="bold" text-align="center">
<xsl:value-of select="Invoice/Details/FooterDescription" />
</fo:block>
<fo:block space-before="1cm" text-align="center" font-weight="bold">
<xsl:value-of select="Invoice/Custom/AdvertisementText" />
</fo:block>
</fo:block>
</fo:flow>
</fo:page-sequence>
</fo:root>
</xsl:template>
</xsl:stylesheet>
DANKE FÜRS LESEN