Я бы не позволил шаблону сопоставления «по умолчанию» или «наименьший приоритет / приоритет» молча глотать гласные или делать любые другие значимые обработки приложений .
Хорошей практикой является то, что шаблон для всех остальных несопоставленных узлов (данного типа) должен создавать хорошее сообщение об отладке и, при необходимости, прекращать обработку.
Если эта рекомендуемая практика не будет соблюдена, то некоторые ошибки будут незаметно оставлены незамеченными, и будет очень трудно найти их и исправить в любой заданный фиксированный период времени.
Вот решение, которое включает только один пустой шаблон :
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:my="my:my"
>
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<my:vowels>
<c>A</c>
<c>E</c>
<c>I</c>
<c>O</c>
<c>U</c>
</my:vowels>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="c[not(. = document('')/*/my:vowels/*)]"/>
</xsl:stylesheet>
Когда это преобразование выполняется для следующего XML-документа :
<alphabet>
<c>A</c>
<c>B</c>
<c>C</c>
<c>D</c>
<c>E</c>
<c>F</c>
<c>G</c>
<c>H</c>
<c>I</c>
<c>J</c>
<c>K</c>
<c>L</c>
<c>M</c>
<c>N</c>
<c>O</c>
<c>P</c>
<c>Q</c>
<c>R</c>
<c>S</c>
<c>T</c>
<c>U</c>
<c>V</c>
<c>W</c>
<c>X</c>
<c>Y</c>
<c>Z</c>
</alphabet>
желаемый результат получен :
<alphabet>
<c>A</c>
<c>E</c>
<c>I</c>
<c>O</c>
<c>U</c>
</alphabet>