XSLT 1.0 Prüfen ob ein Unterknoten vorhanden
juls_pro_37
- xml
- xsl
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
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
Nachtrag:
/SALESINVOICE//HeaderInformation/PackingSlipId_Z_Article
// braucht es nicht, / reicht, da direktes Kindelement.
Grüße,
Thomas