juls_pro_37: XSLT 1.0 Vorzeichen setzen

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

akzeptierte Antworten

  1. 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>
    
    1. 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[. &lt; 0]]/LineText/Text">
        <Text><xsl:value-of select="format-number(. * -1, '#.00')"/></Text>
       </xsl:template>
      

      Grüße, Thomas

      1. DANKE DANKE