过滤掉某些 XML 个节点,并与这些节点及其祖先和子节点形成另一个 XML
Filter out certain XML nodes and form another XML with these nodes and their ancestors and child nodes
我有以下 XML 数据,我需要过滤某些 XML 节点并使用这些节点及其祖先节点及其所有子节点形成另一个 XML 数据.我是 XSLT 的新手,尝试过使用 XSLT 的不同方法,但没有任何效果。
这能否在 XSLT 中实现?
数据:
<?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>
搜索条件 #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>
搜索条件 #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>
搜索条件 #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>
搜索条件 #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>
搜索条件 #5:awardType = 'GAME' 和 awardCode= 'EHNC001'
所需输出:
<?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>
收到的输出:
<?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:
<?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>
据我了解,您想过滤掉 challengeDetails
和 challengePeriodsDetails
给定的一些谓词。要过滤掉 XSL 中的元素,您只需提供与不需要的元素相匹配的空模板。
查询 1
这是一个不错且简单的入门查询。只需从复制所有模板 node()|@*
开始,并添加两条规则以过滤掉不需要的内容。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:template match="/MessageDetails/challengeDetails[
not(challengePeriodsDetails/challengeAwardIssued/awardType = 'GAME')
]" />
<xsl:template match="/MessageDetails/challengeDetails/challengePeriodsDetails[
not(challengeAwardIssued/awardType = 'GAME')
]" />
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*" />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
查询 2
这里的关键是过滤掉不满足两个谓词的challengePeriodsDetails
。我们处理这些元素, 而不是 处理 challengeDetails
,这就是谓词包含另一个谓词的原因。没有它,我们会过滤掉太多数据。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:template match="/MessageDetails/challengeDetails[
not(challengePeriodsDetails[
challengeAwardIssued/awardType = 'GAME' and periodStatus = 'COMPLETED'
])
]" />
<xsl:template match="/MessageDetails/challengeDetails/challengePeriodsDetails[
not(challengeAwardIssued/awardType = 'GAME' and periodStatus = 'COMPLETED')
]" />
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*" />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
查询 3
这里的特殊性是我们不需要担心challengePeriodsDetails
模板中的challengeCode,因为它的父级无论如何都不会出现在最终文档中。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:template match="/MessageDetails/challengeDetails[
not(challengeCode = 'WEEKACTIVE' and challengePeriodsDetails/periodId = '1000000064')
]" />
<xsl:template match="/MessageDetails/challengeDetails/challengePeriodsDetails[
not(periodId = '1000000064')
]" />
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*" />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
查询 4
这个看起来像查询 1,我只能建议您在查看代码之前尝试自己做,以证明自己有所改进。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:template match="/MessageDetails/challengeDetails[not(challengePeriodsDetails/periodId = '1000000066')]" />
<xsl:template match="/MessageDetails/challengeDetails/challengePeriodsDetails[not(periodId = '1000000066')]" />
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*" />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
查询 5
你们太亲密了!诀窍是针对相同的 challengeAwardIssued
测试 awardType
和 awardCode
。您必须在此节点上使用测试。这是一个解决方案:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:template match="/MessageDetails/challengeDetails[
not(challengePeriodsDetails/challengeAwardIssued[
awardType = 'GAME' and awardCode = 'EHNC001'
])
]" />
<xsl:template match="/MessageDetails/challengeDetails/challengePeriodsDetails[
not(challengeAwardIssued[
awardType = 'GAME' and awardCode = 'EHNC001'
])
]" />
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*" />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
我有以下 XML 数据,我需要过滤某些 XML 节点并使用这些节点及其祖先节点及其所有子节点形成另一个 XML 数据.我是 XSLT 的新手,尝试过使用 XSLT 的不同方法,但没有任何效果。
这能否在 XSLT 中实现?
数据:
<?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>
搜索条件 #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>
搜索条件 #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>
搜索条件 #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>
搜索条件 #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>
搜索条件 #5:awardType = 'GAME' 和 awardCode= 'EHNC001'
所需输出:
<?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>
收到的输出:
<?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:
<?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>
据我了解,您想过滤掉 challengeDetails
和 challengePeriodsDetails
给定的一些谓词。要过滤掉 XSL 中的元素,您只需提供与不需要的元素相匹配的空模板。
查询 1
这是一个不错且简单的入门查询。只需从复制所有模板 node()|@*
开始,并添加两条规则以过滤掉不需要的内容。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:template match="/MessageDetails/challengeDetails[
not(challengePeriodsDetails/challengeAwardIssued/awardType = 'GAME')
]" />
<xsl:template match="/MessageDetails/challengeDetails/challengePeriodsDetails[
not(challengeAwardIssued/awardType = 'GAME')
]" />
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*" />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
查询 2
这里的关键是过滤掉不满足两个谓词的challengePeriodsDetails
。我们处理这些元素, 而不是 处理 challengeDetails
,这就是谓词包含另一个谓词的原因。没有它,我们会过滤掉太多数据。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:template match="/MessageDetails/challengeDetails[
not(challengePeriodsDetails[
challengeAwardIssued/awardType = 'GAME' and periodStatus = 'COMPLETED'
])
]" />
<xsl:template match="/MessageDetails/challengeDetails/challengePeriodsDetails[
not(challengeAwardIssued/awardType = 'GAME' and periodStatus = 'COMPLETED')
]" />
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*" />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
查询 3
这里的特殊性是我们不需要担心challengePeriodsDetails
模板中的challengeCode,因为它的父级无论如何都不会出现在最终文档中。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:template match="/MessageDetails/challengeDetails[
not(challengeCode = 'WEEKACTIVE' and challengePeriodsDetails/periodId = '1000000064')
]" />
<xsl:template match="/MessageDetails/challengeDetails/challengePeriodsDetails[
not(periodId = '1000000064')
]" />
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*" />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
查询 4
这个看起来像查询 1,我只能建议您在查看代码之前尝试自己做,以证明自己有所改进。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:template match="/MessageDetails/challengeDetails[not(challengePeriodsDetails/periodId = '1000000066')]" />
<xsl:template match="/MessageDetails/challengeDetails/challengePeriodsDetails[not(periodId = '1000000066')]" />
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*" />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
查询 5
你们太亲密了!诀窍是针对相同的 challengeAwardIssued
测试 awardType
和 awardCode
。您必须在此节点上使用测试。这是一个解决方案:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:template match="/MessageDetails/challengeDetails[
not(challengePeriodsDetails/challengeAwardIssued[
awardType = 'GAME' and awardCode = 'EHNC001'
])
]" />
<xsl:template match="/MessageDetails/challengeDetails/challengePeriodsDetails[
not(challengeAwardIssued[
awardType = 'GAME' and awardCode = 'EHNC001'
])
]" />
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*" />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>