Простой ответ: потому что вы никогда не говорите процессору XSLT игнорировать его.
Вы предоставляете шаблон, который обрабатывает prf:*
, но вы не запрещаете обработку base:
. Ничто иное, процессор XSLT применяет поведение по умолчанию ( встроенные правила , также здесь ) к любым узлам, с которыми он сталкивается, которые не обрабатываются никаким пользовательским шаблоном .
Поведение по умолчанию для узлов элементов:
- скопировать свои дочерние элементы текстового узла в вывод,
- обрабатывает их дочерние элементы
Зная, что ваши элементы <base:Description>
и <base:Text>
производят именно то, что вы видите. Чтобы предотвратить это, либо ловите их пустым шаблоном:
<xsl:template match="base:*" />
или управляйте потоком программы вручную, определив шаблон для корневого узла:
<xsl:template match="/">
<xsl:apply-templates select="profile/prf:Component" />
</xsl:template>