juls_pro_37: XSLT 1.0 Prüfen ob ein Unterknoten vorhanden

Hi,

würde eine Prüfung auf "ItemDeliveryInformation" benötigen, ob der Unterpunkt "PackingSlipId" vorhanden ist, wenn nicht, soll ein neues Feld erzeugt werden mit der Bezeichnung "PackingSlipId" und dem Inhalt von "HeaderInformation/PackingSlipId_Z_Article"

XML:

<?xml version="1.0" encoding="ISO-8859-1"?>
<SALESINVOICE>
	<Interchange>		
	</Interchange>
	<HeaderInformation>		
		<PackingSlipId_Z_Article>neueLS-Nr</PackingSlipId_Z_Article>		
	</HeaderInformation>
	<LineInformation>
		<Item>
			<LineNum>1</LineNum>
			<GTIN>123</GTIN>
				<ItemDeliveryInformation>
				<LineNumDeliveryNote>1</LineNumDeliveryNote>
				<PackingSlipId>LS264694</PackingSlipId>
				<DeliveryDate>20200615</DeliveryDate>
				<DeliveredQuantity>920.00</DeliveredQuantity>
			</ItemDeliveryInformation>
		</Item>
	</LineInformation>
	<LineInformation>
		<Item>
			<LineNum>2</LineNum>					
			<ItemDeliveryInformation>
				<LineNumDeliveryNote>0</LineNumDeliveryNote>
				<DeliveryDate>20200615</DeliveryDate>
				<DeliveredQuantity>23.00</DeliveredQuantity>
			</ItemDeliveryInformation>
		</Item>
	</LineInformation>
</SALESINVOICE>

XSLT:

<xsl:template match="ItemDeliveryInformation"> 
    <xsl:if test="PackingSlipId = ''">
      <PackingSlipId><xsl:value-of select="HeaderInformation/PackingSlipId_Z_Article"></xsl:value-of></PackingSlipId>
    </xsl:if>
    <xsl:apply-templates select="node()|@*"/>  
</xsl:template>

korrekt wäre:

<?xml version="1.0" encoding="ISO-8859-1"?>
<SALESINVOICE>
	<Interchange>		
	</Interchange>
	<HeaderInformation>		
		<PackingSlipId_Z_Article>neueLS-Nr</PackingSlipId_Z_Article>		
	</HeaderInformation>
	<LineInformation>
		<Item>
			<LineNum>1</LineNum>
			<GTIN>123</GTIN>
				<ItemDeliveryInformation>
				<LineNumDeliveryNote>1</LineNumDeliveryNote>
				<PackingSlipId>LS264694</PackingSlipId>
				<DeliveryDate>20200615</DeliveryDate>
				<DeliveredQuantity>920.00</DeliveredQuantity>
			</ItemDeliveryInformation>
		</Item>
	</LineInformation>
	<LineInformation>
		<Item>
			<LineNum>2</LineNum>					
			<ItemDeliveryInformation>
				<LineNumDeliveryNote>0</LineNumDeliveryNote>
				<PackingSlipId>neueLS-Nr</PackingSlipId>
				<DeliveryDate>20200615</DeliveryDate>
				<DeliveredQuantity>23.00</DeliveredQuantity>
			</ItemDeliveryInformation>
		</Item>
	</LineInformation>
</SALESINVOICE>

LG Julian

akzeptierte Antworten

  1. Hallo Julian,

    würde eine Prüfung auf "ItemDeliveryInformation" benötigen, ob der Unterpunkt "PackingSlipId" vorhanden ist, wenn nicht, soll ein neues Feld erzeugt werden mit der Bezeichnung "PackingSlipId" und dem Inhalt von "HeaderInformation/PackingSlipId_Z_Article"

    Offenbar ist PackingSlipId das auf LineNumDeliveryNote folgende Geschwisterelement. Dann bietet sich dieses Vorgehen an:

    <?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="LineNumDeliveryNote">
        <xsl:copy-of select="."/>
        <xsl:if test="not(following-sibling::PackingSlipId)">
          <PackingSlipId>
            <xsl:value-of select="/SALESINVOICE//HeaderInformation/PackingSlipId_Z_Article"/>
          </PackingSlipId>
        </xsl:if>
      </xsl:template>
    
    </xsl:stylesheet>
    

    Grüße,
    Thomas

    1. Nachtrag:

      /SALESINVOICE//HeaderInformation/PackingSlipId_Z_Article

      // braucht es nicht, / reicht, da direktes Kindelement.

      Grüße,
      Thomas

      1. DANKE DANKE DANKE!!!!! :)