Самый простой способ сделать это (почти механически и без раздумий):
<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="output"><xsl:apply-templates/></xsl:template>
</xsl:stylesheet>
, когда это преобразование применяется к предоставленному документу XML :
<results>
<output>
<status>OK</status>
<usage>Please use it</usage>
<url/>
<language>english</language>
<category>science_technology</category>
<score>0.838661</score>
</output>
</results>
желаемый, правильный результат получается :
<results>
<status>OK</status>
<usage>Please use it</usage>
<url/>
<language>english</language>
<category>science_technology</category>
<score>0.838661</score>
</results>
Пояснение :
Правило / шаблон идентификации копирует каждый узел "как есть ".
Существует один шаблон, переопределяющий правило идентификации .Он соответствует любому элементу output
и предотвращает его копирование в вывод, но продолжает обработку любого из его дочерних элементов.
Помните : переопределение идентификатораПравило - это самый фундаментальный и самый мощный шаблон проектирования XSLT.