I have below XML data and I need to filter certain XML nodes and form another XML data with those nodes and it's ancestor nodes as well as all of it's child nodes. I am new to XSLT and tried different approach using XSLT but nothing is working.
Can this be achieved in XSLT or not?
Data:
<?xml version="1.0" encoding="UTF-8"?>
<MessageDetails>`enter code here`
<challengeDetails>
<challengeId>1000000017</challengeId>
<challengeCode>WEEKACTIVE</challengeCode>
<challengeCategory>StayActive</challengeCategory>
<challengePeriodsDetails>
<periodId>1000000064</periodId>
<periodNumber>2</periodNumber>
<periodStatus>INPROGRESS</periodStatus>
<challengeAwardIssued>
<awardType>GAME</awardType>
<awardCode>GCH009</awardCode>
</challengeAwardIssued>
<challengeAwardIssued>
<awardType>REWARD</awardType>
<awardCode>EHNC001</awardCode>
</challengeAwardIssued>
</challengePeriodsDetails>
<challengePeriodsDetails>
<periodId>1000000065</periodId>
<periodNumber>3</periodNumber>
<periodStatus>COMPLETED</periodStatus>
<challengeAwardIssued>
<awardType>REWARD</awardType>
<awardCode>EHNC002</awardCode>
</challengeAwardIssued>
</challengePeriodsDetails>
</challengeDetails>
<challengeDetails>
<challengeId>1000000018</challengeId>
<challengeCode>QUITSUGAR</challengeCode>
<challengeCategory>QuitSugar</challengeCategory>
<challengePeriodsDetails>
<periodId>1000000066</periodId>
<periodNumber>2</periodNumber>
<periodStatus>INPROGRESS</periodStatus>
<challengeAwardIssued>
<awardType>REWARD</awardType>
<awardCode>EHNC001</awardCode>
</challengeAwardIssued>
</challengePeriodsDetails>
<challengePeriodsDetails>
<periodId>1000000067</periodId>
<periodNumber>3</periodNumber>
<periodStatus>COMPLETED</periodStatus>
<challengeAwardIssued>
<awardType>GAME</awardType>
<awardCode>EHNC001</awardCode>
</challengeAwardIssued>
</challengePeriodsDetails>
</challengeDetails>
</MessageDetails>
Search Criteria #1: awardType = GAME
<?xml version="1.0" encoding="UTF-8"?>
<MessageDetails>
<challengeDetails>
<challengeId>1000000017</challengeId>
<challengeCode>WEEKACTIVE</challengeCode>
<challengeCategory>StayActive</challengeCategory>
<challengePeriodsDetails>
<periodId>1000000064</periodId>
<periodNumber>2</periodNumber>
<periodStatus>INPROGRESS</periodStatus>
<challengeAwardIssued>
<awardType>GAME</awardType>
<awardCode>GCH009</awardCode>
</challengeAwardIssued>
</challengePeriodsDetails>
</challengeDetails>
<challengeDetails>
<challengeId>1000000018</challengeId>
<challengeCode>QUITSUGAR</challengeCode>
<challengeCategory>QuitSugar</challengeCategory>
<challengePeriodsDetails>
<periodId>1000000067</periodId>
<periodNumber>3</periodNumber>
<periodStatus>COMPLETED</periodStatus>
<challengeAwardIssued>
<awardType>GAME</awardType>
<awardCode>GCH008</awardCode>
</challengeAwardIssued>
</challengePeriodsDetails>
</challengeDetails>
</MessageDetails>
Search Criteria #2: awardType = GAME and periodStatus = COMPLETED and challengeCode = QUITSUGAR
<?xml version="1.0" encoding="UTF-8"?>
<MessageDetails>
<challengeDetails>
<challengeId>1000000018</challengeId>
<challengeCode>QUITSUGAR</challengeCode>
<challengeCategory>QuitSugar</challengeCategory>
<challengePeriodsDetails>
<periodId>1000000067</periodId>
<periodNumber>3</periodNumber>
<periodStatus>COMPLETED</periodStatus>
<challengeAwardIssued>
<awardType>GAME</awardType>
<awardCode>GCH008</awardCode>
</challengeAwardIssued>
</challengePeriodsDetails>
</challengeDetails>
</MessageDetails>
Search Criteria #3: challengeCode = WEEKACTIVE & periodId = 1000000064
<?xml version="1.0" encoding="UTF-8"?>
<MessageDetails>
<challengeDetails>
<challengeId>1000000017</challengeId>
<challengeCode>WEEKACTIVE</challengeCode>
<challengeCategory>StayActive</challengeCategory>
<challengePeriodsDetails>
<periodId>1000000064</periodId>
<periodNumber>2</periodNumber>
<periodStatus>INPROGRESS</periodStatus>
<challengeAwardIssued>
<awardType>GAME</awardType>
<awardCode>GCH009</awardCode>
</challengeAwardIssued>
</challengePeriodsDetails>
</challengeDetails>
</MessageDetails>
Search Criteria #4: periodId = 1000000066
<?xml version="1.0" encoding="UTF-8"?>
<MessageDetails>
<challengeDetails>
<challengeId>1000000018</challengeId>
<challengeCode>QUITSUGAR</challengeCode>
<challengeCategory>QuitSugar</challengeCategory>
<challengePeriodsDetails>
<periodId>1000000066</periodId>
<periodNumber>2</periodNumber>
<periodStatus>INPROGRESS</periodStatus>
<challengeAwardIssued>
<awardType>REWARD</awardType>
<awardCode>EHNC001</awardCode>
</challengeAwardIssued>
</challengePeriodsDetails>
</challengeDetails>
</MessageDetails>
Search Criteria #5: awardType = 'GAME' and awardCode= 'EHNC001'
Required output:
<?xml version="1.0" encoding="UTF-8"?>
<MessageDetails>`enter code here`
<challengeDetails>
<challengeId>1000000018</challengeId>
<challengeCode>QUITSUGAR</challengeCode>
<challengeCategory>QuitSugar</challengeCategory>
<challengePeriodsDetails>
<periodId>1000000067</periodId>
<periodNumber>3</periodNumber>
<periodStatus>COMPLETED</periodStatus>
<challengeAwardIssued>
<awardType>GAME</awardType>
<awardCode>EHNC001</awardCode>
</challengeAwardIssued>
</challengePeriodsDetails>
</challengeDetails>
</MessageDetails>
Output received:
<?xml version="1.0" encoding="UTF-8"?>
<MessageDetails>`enter code here`
<challengeDetails>
<challengeId>1000000017</challengeId>
<challengeCode>WEEKACTIVE</challengeCode>
<challengeCategory>StayActive</challengeCategory>
<challengePeriodsDetails>
<periodId>1000000064</periodId>
<periodNumber>2</periodNumber>
<periodStatus>INPROGRESS</periodStatus>
</challengePeriodsDetails>
</challengeDetails>
<challengeDetails>
<challengeId>1000000018</challengeId>
<challengeCode>QUITSUGAR</challengeCode>
<challengeCategory>QuitSugar</challengeCategory>
<challengePeriodsDetails>
<periodId>1000000067</periodId>
<periodNumber>3</periodNumber>
<periodStatus>COMPLETED</periodStatus>
<challengeAwardIssued>
<awardType>GAME</awardType>
<awardCode>EHNC001</awardCode>
</challengeAwardIssued>
</challengePeriodsDetails>
</challengeDetails>
</MessageDetails>
XSLT used:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="3.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:template match="/MessageDetails/challengeDetails[not(challengePeriodsDetails/challengeAwardIssued/awardType = 'GAME' and challengePeriodsDetails/challengeAwardIssued/awardCode= 'EHNC001')]" />
<xsl:template match="/MessageDetails/challengeDetails/challengePeriodsDetails[not(challengeAwardIssued/awardType = 'GAME' and challengeAwardIssued/awardCode= 'EHNC001')]" />
<xsl:template match="/MessageDetails/challengeDetails/challengePeriodsDetails/challengeAwardIssued[not(awardType = 'GAME' and awardCode= 'EHNC001')]" />
<xsl:mode on-no-match="shallow-copy" />
<xsl:output method="xml" indent="yes" />
</xsl:stylesheet>