согласился на оба ответа; Ваша оценка того, что Шаблон №2 не будет обработан как таковая, абсолютно правильна.
Обратите внимание, что дочерние элементы узла (то есть его дочерние элементы, комментарии, текст и инструкции по обработке, но атрибуты , а не ) являются специальными только двумя способами:
- Значением по умолчанию атрибута
select
является "node()
", XPath для выбора дочерних элементов и
- Встроенный шаблон правил для корневых узлов и узлов элементов предназначен для обработки дочерних элементов.
Кроме этих двух аспектов, дети не имеют особого статуса, когда дело доходит до выбора узлов для обработки. Вы можете выбрать любые узлы, которые вы хотите, включая предков. Вы можете пройтись по дереву в любом порядке. Экстремальный способ продемонстрировать это - написать таблицу стилей, которая переворачивает иерархию документа (переворачивает ее вверх дном). (Возможно, вы захотите использовать другой режим, чтобы при обработке родительских узлов вызывалось другое правило, чем при обработке дочерних узлов.)
Я также хочу проверить и убедиться, что вы понимаете различие между «корневым узлом» (переименованным в «узел документа» в XPath / XSLT 2.0) и корневым (или документом) элементом . В вашем примере XML, является , а не корневым узлом; это самый внешний элемент , который сам является дочерним элементом корневого узла, невидимым внешним контейнером в корне каждого дерева в модели данных XPath / XSLT.
Если вы хотите взять на себя управление обработкой справа от летучей мыши, вы всегда можете использовать или (при условии, что исходное дерево представляет собой правильно сформированный документ XML, а не фрагмент) . Это альтернативные способы сделать это. Одна из особенностей последнего заключается в том, что импортированный код, который содержит правило для match = "/", будет запускаться раньше, поскольку явные правила шаблона (даже если они имеют наименьший приоритет импорта) всегда имеют приоритет над встроенными правилами шаблона. Если у вас нет явного в импортируемой таблице стилей, то, пока вы не импортируете код, имеющий его, вы полагаетесь на встроенное правило шаблона для корневых узлов (применяйте шаблоны к дети - в этом случае примените шаблоны к элементу child).
Альтернативный способ взять контроль над битой, например, это использовать match = "/ person". Такое правило будет соответствовать любому элементу при условии, что он является дочерним для корневого узла. Если XML не имеет в качестве внешнего элемента, он не будет вызван. И если у вас также есть