Просто чтобы немного расширить и пояснить, что разместил Томалак: корень документа XML в иерархии DOM находится над элементом верхнего уровня . Чрезвычайно распространено видеть, что эти два смущены. Рассмотрим этот документ XML:
<!-- This is a node - yes, comments are nodes. -->
<root>
<child/>
</root>
<!-- This is also a node. -->
Корень этого документа имеет три дочерних узла: узел комментария, узел элемента и другой узел комментария. Элемент верхнего уровня называется root
, потому что именно это делают все, кто создает экземпляры XML-документов, чтобы увековечить путаницу между корнем документа и элементом верхнего уровня. (Особенно, если они все еще находятся на этапе своего обучения XML, где они используют «узел», когда они означают «элемент».)
Это приводит нас к одной из причин, по которой шаблон, который Томалак называет «более хорошим», приятнее. Если вы расширяете преобразование идентификаторов, единственное, что XSLT изменит в вашем документе, - это элементы, для которых вы создали шаблоны. Каждый второй узел в документе копируется без изменений. Поэтому, если во входном документе есть комментарии вокруг элемента верхнего уровня, как в приведенном выше примере, они не будут удалены из вывода, как если бы вы просто реализовали шаблон, соответствующий элементу Address
.
Конечно, если вы хотите , чтобы ваш вывод исключал комментарии, это тоже легко сделать; просто не реализуйте преобразование идентичности.