La condition 'when' n'identifie pas correctement les éléments vides. La sortie désirée devrait afficher l'attribut 'EMPTYAddress2'. J'ai essayé différentes conditions «non» mais pas de chance. S'il vous plaît, aidez, je suis un débutant. J'utilise Oxygen XML Developer et aucune erreur n'est renvoyée.XSL lorsque la condition n'identifie pas l'élément vide
fichier source XML:
<InterfaceData>
<OBJECT_ACTION_ID>16283</OBJECT_ACTION_ID>
<Employee>
<Employee>
<EmployeeBasic>
<EmployeeNo>50064</EmployeeNo>
</EmployeeBasic>
<EmployeeBasic_DateMarriageCeased>
<PersonDetailsRecords>
<PersonDetails>
<DateMarriageCeased/>
</PersonDetails>
</PersonDetailsRecords>
</EmployeeBasic_DateMarriageCeased>
<EmployeeAddress>
<AddressRecords>
<AddressDetails>
<Address1>Line1</Address1>
<Address2/>
<Address3>Line3</Address3>
<Address4>Line4</Address4>
<Postcode>Postcode</Postcode>
</AddressDetails>
</AddressRecords>
</EmployeeAddress>
</Employee>
</Employee>
</InterfaceData>
feuille de style XSL:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:template match="/">
<xsl:for-each-group select="//InterfaceData" group-by="OBJECT_ACTION_ID">
<!-- Employee -->
<EmployeeAddress>
<xsl:for-each select="current-group()//AddressDetails">
<xsl:call-template name="CGIderiveAddress">
<xsl:with-param name="myVarAddress1" select="current-group()//Address1/text()"/>
<xsl:with-param name="myVarAddress2" select="current-group()//Address2/text()"/>
<xsl:with-param name="myVarAddress3" select="current-group()//Address3/text()"/>
<xsl:with-param name="myVarAddress4" select="current-group()//Address4/text()"/>
<xsl:with-param name="myVarPostcode" select="current-group()//Postcode/text()"/>
</xsl:call-template>
</xsl:for-each>
</EmployeeAddress>
</xsl:for-each-group>
</xsl:template>
<xsl:template name="CGIderiveAddress">
<xsl:param name="myVarAddress1"/>
<xsl:param name="myVarAddress2"/>
<xsl:param name="myVarAddress3"/>
<xsl:param name="myVarAddress4"/>
<xsl:param name="myVarPostcode"/>
<xsl:attribute name="Address1">
<xsl:value-of select="$myVarAddress1"/>
</xsl:attribute>
<xsl:choose>
<!-- Address Line 2 is empty and Adress Line 3 exists -->
<xsl:when test="$myVarAddress2 = ''">
<xsl:attribute name="EMPTYAddress2">
<xsl:value-of select="'EMPTYAddress2'"/>
</xsl:attribute>
</xsl:when>
<xsl:otherwise>
<xsl:attribute name="NotEMPTYAddress2">
<xsl:value-of select="'NotEMPTYAddress2'"/>
</xsl:attribute>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
xsl: output:
<?xml version="1.0" encoding="UTF-8"?>
<EmployeeAddress Address1="Line1"
NotEMPTYAddress2="NotEMPTYAddress2"/>
L'utilisation de 'current-group()' quand vous n'avez pas de 'for-each-group' n'a aucun sens. –
Je crains qu'un 'for-each-group' sans" group-by' "ou" group-adjacent "ou" group-starting-with "/" ending-with "n'a pas de sens non plus. Si le groupement n'est pas pertinent que de prendre le temps de préparer un échantillon minimal mais complet nous permettant de reproduire le problème, avec l'entrée que vous avez, la sortie que vous obtenez et le résultat que vous voulez. –
En outre, vous faites 'for-each-group' sur' AddressRecords' qui est l'élément racine, et il n'y en aura jamais qu'un seul. Ce n'est pas quelque chose que vous voudriez grouper. –