Это преобразование игнорирует любые элементы , которые не имеют дочерних узлов. Узел в этом контексте означает узел инструкции элемента, текста, комментария или обработки.
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="b[not(node()]"/>
</xsl:stylesheet>
Обратите внимание, что здесь мы используем один из самых фундаментальных шаблонов проектирования XSLT - используя преобразование идентичности и переопределяем его для определенных узлов.
Переопределяющий шаблон будет выбран только для узлов, которые являются элементами с именем "b" и не имеют (любые узлы как) дочерние элементы. Этот шаблон пуст (не имеет содержимого), поэтому его применение заключается в том, что соответствующий узел игнорируется / отбрасывается и не воспроизводится в выходных данных.
Эта техника очень мощная и широко используется для таких задач, а также для переименования, изменения содержимого или атрибутов, добавления дочерних или родных элементов к любому конкретному узлу, который может быть сопоставлен (каждый тип узла, за исключением узла пространства имен может использоваться в качестве шаблона соответствия в атрибуте «match»
Надеюсь, это помогло.
Приветствия
Димитр Новатчев