XPath никогда не изменяет узлы, которые он выбирает, он просто выбирает их.Если ваш выбор включает, скажем, элемент Root, то при сериализации он будет включать все элементы входного документа, даже если вы выберете только этот единственный элемент.
Вы можете перебирать все элементы, у которых нет child21 вих ось предка или самого себя:
//*[not(ancestor-or-self::child21)]
Но это не очень полезно, если вы хотите сгенерировать показанный результат.
Тривиально отфильтровать этот элемент и его потомков с помощью xslt, просто иметь шаблон идентификации и добавить один шаблон
<xsl:template match="child21"/>
, который отбрасывает эту ветвь ввода, но вы можете 'сделать это только с XPath.