juls_pro_37: XSLT-Concat-Abfrage

Hi,

bitte um Hilfe, warum der Knoten "LineChange" nicht korrekt erstellt wird.

Versuche im ersten Schritt (mittels when-Abfrage) zu prüfen ob Werte ident sind.

Im zweiten Schritt würde ich gerne prüfen, ob eines dieser ausgegebenen Felder (LineChangeDeliveryDate, LineChangeQty, LineChangeArticle) mit dem Wert yes befüllt ist, wenn dies der Fall ist soll ein neuer Knoten (LineChange) ebenfalls mit dem Wert yes erstellt werden.

Der Knoten "LineChange" wird zwar erstellt, jedoch funktioniert die Abfrage nicht richtig.

Habe als Test die Menge bei QtyOrderd angepasst.

XML:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<OrderResponse>
  <Interchange>    
  </Interchange>
  <HeaderInformation>    
  </HeaderInformation>
  <LineInformation>
    <Item>     
      <LineNum>1</LineNum>      
      <SupplierArticleNumber>BK07050SC40</SupplierArticleNumber>      
      <Quantity>3.00</Quantity>
      <QtyOrdered>3.00</QtyOrdered>
      <DeliveryDate>2019-12-09</DeliveryDate>
      <OrigDeliveryDate>2019-12-09</OrigDeliveryDate>
      <OrigSupplierArticleNumber>BK07050SC40</OrigSupplierArticleNumber>
    </Item>
    <Item>     
      <LineNum>2</LineNum>      
      <SupplierArticleNumber>BK07050SC40</SupplierArticleNumber>      
      <Quantity>3.00</Quantity>
      <QtyOrdered>5.00</QtyOrdered>
      <DeliveryDate>2019-12-09</DeliveryDate>
      <OrigDeliveryDate>2019-12-09</OrigDeliveryDate>
      <OrigSupplierArticleNumber>BK07050SC40</OrigSupplierArticleNumber>
    </Item>    
  </LineInformation>  
</OrderResponse>

XSLT:

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


 <xsl:template match="Item">
    <xsl:copy>
    	<LineChangeDeliveryDate>
			<xsl:choose>
				<xsl:when test="OrigDeliveryDate = DeliveryDate">no</xsl:when>
				<xsl:otherwise>yes</xsl:otherwise>
			</xsl:choose>
		</LineChangeDeliveryDate>
		<LineChangeQty>
			<xsl:choose>
				<xsl:when test="QtyOrdered = Quantity">no</xsl:when>
				<xsl:otherwise>yes</xsl:otherwise>
			</xsl:choose>
		</LineChangeQty>
    	<LineChangeArticle>
			<xsl:choose>
				<xsl:when test="OrigSupplierArticleNumber = SupplierArticleNumber">no</xsl:when>
				<xsl:otherwise>yes</xsl:otherwise>
			</xsl:choose>
		</LineChangeArticle>
        <LineChange>
        	<xsl:choose>
				<xsl:when test="concat(LineNum, '|', LineChangeDeliveryDate[yes], '|', LineChangeQty[yes], '|', LineChangeArticle[yes])">yes</xsl:when>
				<xsl:otherwise>no</xsl:otherwise>
			</xsl:choose>
		</LineChange>
<!--copy all other nodes-->
<xsl:apply-templates select="@* | node()"/>
	</xsl:copy>
</xsl:template>
  
    <!-- Identity-Template für die nicht explizit benannten Elemente -->
  <xsl:template match="@* | node()">
    <xsl:copy>
      <xsl:apply-templates select="@* | node()"/>
    </xsl:copy>
  </xsl:template>


</xsl:stylesheet>

Korrekt wäre, wenn zB Quantity und QtyOrdered ident sind: LineChange "no" andernfalls "yes" Erhalte aber immer "yes"???

LG Julian

  1. Hallo Julian,

    Versuche im ersten Schritt (mittels when-Abfrage) zu prüfen ob Werte ident sind.

    concat() erzeugt einen String. Das test-Attribut erwartet einen Wahrheitswert. Ansonsten wäre es sinnvoll im vorherigen Thread zu bleiben, dort habe ich auch geantwortet.

    Grüße,
    Thomas