Мадс прав, что один шаблон соответствует только корневому элементу xml, а другой - определенному элементу (Проблемы / Проблемы / Описание). Итак, они работают на разных элементах. Однако, ваш вопрос более общий? Почему два xsl: шаблонов не могут соответствовать конкретному элементу XML, выполняемому для него? Другими словами, почему и шаблон, соответствующий «node ()», и шаблон, соответствующий «Проблемы / Проблема / Описание», не работают с одним и тем же элементом XML «Проблемы / Проблема / Описание»?
Если это так, то вам не хватает ключевой концепции XSLT: priority . Это похоже на порядок операций, которые вы изучили в алгебре (деление, умножение, вычитание, сложение). В XSLT это работает так. Для любого данного элемента XML поведение по умолчанию - обрабатывать его один и только один раз. Задачей движка XSLT является определение всех шаблонов, которые могут воздействовать на отдельный элемент XML, поиск наиболее конкретного и применение только этого шаблона.
То, как определяется специфичность, немного сложно, но в этом примере это просто. Один шаблон соответствует любым узлам (node ()), а другой - определенному именованному узлу. Итак, конкретно названный узел выигрывает.
Полные правила приоритета см. В разделе 5.5 спецификации XSLT на W3C. http://www.w3.org/TR/xslt