I have the input xml:
<PerNationalId>
<PerNationalId>
<nationalId>999.999.868-88</nationalId>
<personNav>
<PerPerson>
<employmentNav>
<EmpEmployment>
<empWorkPermitNav>
<EmpWorkPermit>
<documentNumber>27122165960</documentNumber>
<issuePlaceNav/>
<customString3/>
<documentTypeNav>
<PicklistOption>
<externalCode>6</externalCode>
</PicklistOption>
</documentTypeNav>
</EmpWorkPermit>
</empWorkPermitNav>
<jobInfoNav>
<EmpJob>
<emplStatusNav>
<PicklistOption>
<externalCode>T</externalCode>
</PicklistOption>
</emplStatusNav>
<company>0004</company>
</EmpJob>
</jobInfoNav>
<userId>60020077</userId>
</EmpEmployment>
<EmpEmployment>
<empWorkPermitNav>
<EmpWorkPermit>
<documentNumber>320008725351</documentNumber>
<issuePlaceNav/>
<customString3/>
<documentTypeNav>
<PicklistOption>
<externalCode>3</externalCode>
</PicklistOption>
</documentTypeNav>
</EmpWorkPermit>
</empWorkPermitNav>
<jobInfoNav>
<EmpJob>
<emplStatusNav>
<PicklistOption>
<externalCode>A</externalCode>
</PicklistOption>
</emplStatusNav>
<company>0004</company>
</EmpJob>
</jobInfoNav>
<userId>20028939</userId>
</EmpEmployment>
</employmentNav>
</PerPerson>
</personNav>
</PerNationalId>
</PerNationalId>
And I need the following output:
<PerNationalId>
<PerNationalId>
<nationalId>999.999.868-88</nationalId>
<personNav>
<PerPerson>
<employmentNav>
<EmpEmployment>
<empWorkPermitNav>
<EmpWorkPermit>
<documentNumber>320008725351</documentNumber>
<issuePlaceNav/>
<customString3/>
<documentTypeNav>
<PicklistOption>
<externalCode>3</externalCode>
</PicklistOption>
</documentTypeNav>
</EmpWorkPermit>
</empWorkPermitNav>
<jobInfoNav>
<EmpJob>
<emplStatusNav>
<PicklistOption>
<externalCode>A</externalCode>
</PicklistOption>
</emplStatusNav>
<company>0004</company>
</EmpJob>
</jobInfoNav>
<userId>20028939</userId>
</EmpEmployment>
</employmentNav>
</PerPerson>
</personNav>
</PerNationalId>
</PerNationalId>
Basically I need to remove the node EmpEmployment when sub node inside it /jobInfoNav/EmpJob/emplStatusNav/PicklistOption/externalCode has the value equal to T.
Could you please help me?
Thanks.
I have tried the following XSLT, but it's removing only the emplStatusNav tag
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="/PerNationalId/PerNationalId/personNav/PerPerson/employmentNav/EmpEmployment/jobInfoNav/EmpJob/emplStatusNav/PicklistOption[(externalCode= 'T')]"/>
</xsl:stylesheet>
XSLT 3 (fiddle online):
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="3.0"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="#all">
<xsl:mode on-no-match="shallow-copy"/>
<xsl:template match="EmpEmployment[jobInfoNav/EmpJob/emplStatusNav/PicklistOption/externalCode = 'T']"/>
</xsl:stylesheet>
XSLT 2 (fiddle online):
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="2.0"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="#all">
<xsl:template match="@* | node() | document-node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="EmpEmployment[jobInfoNav/EmpJob/emplStatusNav/PicklistOption/externalCode = 'T']"/>
</xsl:stylesheet>