Предполагая, что вопрос требует вывода только EMpDetails
, у которого Country
child имеет строковое (без учета регистра) значение "India"
:
I. Это XSLT 1.0 преобразование :
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match=
"EMpDetails
[not(translate(Country,
'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
'abcdefghijklmnopqrstuvwxyz'
)
='india'
)
]
"/>
</xsl:stylesheet>
при применении к предоставленному документу XML :
<EmployeList>
<EMpDetails>
<Name>Kiran</Name>
<ID>ID001</ID>
<city>Hyderabad</city>
<Country>India</Country>
</EMpDetails>
<EMpDetails>
<Name>Sunny</Name>
<ID>ID002</ID>
<city>Banglore</city>
<Country>INDIA</Country>
</EMpDetails>
<EMpDetails>
<Name>John</Name>
<ID>ID001</ID>
<city>TEXAS</city>
<Country>US</Country>
</EMpDetails>
<EMpDetails>
<Name>Raj</Name>
<ID>ID006</ID>
<city>Dallas</city>
<Country>US</Country>
</EMpDetails>
<EMpDetails>
<Name>Nag</Name>
<ID>ID007</ID>
<city>ITALY</city>
<Country>Rome</Country>
</EMpDetails>
</EmployeList>
дает желаемый, правильный результат :
<EmployeList>
<EMpDetails>
<Name>Kiran</Name>
<ID>ID001</ID>
<city>Hyderabad</city>
<Country>India</Country>
</EMpDetails>
<EMpDetails>
<Name>Sunny</Name>
<ID>ID002</ID>
<city>Banglore</city>
<Country>INDIA</Country>
</EMpDetails>
</EmployeList>
II. Это XSLT 2.0 преобразование:
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match=
"EMpDetails[not(upper-case(Country)='INDIA')]"/>
</xsl:stylesheet>
снова дает тот же, желаемый и правильный результат .
Объяснение : Переопределение правила идентификации с помощью шаблона, соответствующего всем нежелательным EMpDetails
элементам. Этот шаблон имеет пустое тело, что эффективно предотвращает копирование любых соответствующих элементов в вывод.
Помните : Использование и переопределение правила / шаблона идентификации является наиболее фундаментальным и мощным шаблоном проектирования XSLT.