XSLT 1.0 Vorzeichen setzen
juls_pro_37
- xml
- xsl
0 juls_pro_371 ThomasM
Hi,
bitte um Hilfe, was bei meiner Abfrage nicht korrekt ist.
Es gehört unter "Item/LineText/Text" ein "-" als Vorzeichen, wenn im darüberstehendem Item/LineAmount (in meinem Fall bei LineNum 2) bereits ein "-" als Vorzeichen besteht.
(Bei "VATBaseAmount" scheint es zu funktionieren, LineText liegt aber eine Ebene Unter "Item")
XML
<?xml version="1.0" encoding="ISO-8859-1"?>
<SALESINVOICE>
<Interchange>
<Interchange_Control_Number>5637767187</Interchange_Control_Number>
</Interchange>
<HeaderInformation>
<OrigInvoiceNumber>1</OrigInvoiceNumber>
</HeaderInformation>
<LineInformation>
<Item>
<LineNum>1</LineNum>
<TotalQuantity>4.00</TotalQuantity>
<SalesPrice>133.0000</SalesPrice>
<LineAmount>478.8000</LineAmount>
<VATBaseAmount>95.76</VATBaseAmount>
<VATPercentage>20.00</VATPercentage>
<ItemDeliveryInformation>
<LineNumDeliveryNote>1</LineNumDeliveryNote>
</ItemDeliveryInformation>
<LineText>
<Qualifier>VATAmount</Qualifier>
<Text>19.15</Text>
</LineText>
</Item>
</LineInformation>
<LineInformation>
<Item>
<LineNum>2</LineNum>
<TotalQuantity>4.00</TotalQuantity>
<SalesPrice>133.0000</SalesPrice>
<LineAmount>-478.8000</LineAmount>
<VATBaseAmount>95.76</VATBaseAmount>
<VATPercentage>20.00</VATPercentage>
<ItemDeliveryInformation>
<LineNumDeliveryNote>1</LineNumDeliveryNote>
</ItemDeliveryInformation>
<LineText>
<Qualifier>VATAmount</Qualifier>
<Text>25.00</Text>
</LineText>
</Item>
</LineInformation>
</SALESINVOICE>
XSLT:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" encoding="UTF-8"/>
<xsl:template match="Item/VATBaseAmount[../LineAmount[contains(., '-')]]">
<VATBaseAmount>-<xsl:value-of select="."/></VATBaseAmount>
</xsl:template>
<xsl:template match="Item/LineText/Text[../LineAmount[contains(., '-')]]">
<Text>-<xsl:value-of select="."/></Text>
</xsl:template>
<!-- delete empty nodes -->
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="*[not(@*|*|comment()|processing-instruction()) and normalize-space()='']"/>
</xsl:stylesheet>
LG Julian
bzw. bin ich soeben auf folg. Lösung gestoßen:
<xsl:template match="Item[./LineAmount[contains(., '-')]]/LineText/Text">
<Text>-<xsl:value-of select="."/></Text>
</xsl:template>
Hallo Julian,
bzw. bin ich soeben auf folg. Lösung gestoßen:
<xsl:template match="Item[./LineAmount[contains(., '-')]]/LineText/Text"> <Text>-<xsl:value-of select="."/></Text> </xsl:template>
Als numerische Prüfung würde ich es eher so angehen:
<xsl:template match="Item[./LineAmount[. < 0]]/LineText/Text">
<Text><xsl:value-of select="format-number(. * -1, '#.00')"/></Text>
</xsl:template>
Grüße, Thomas