XSLT | страница 43
В действительности, рассмотренная только что диаграмма дерева не дает полной картины того, как она выглядит с точки зрения процессора XSLT. Я исключил один тип узлов, который вызывает большую путаницу при изучении XSLT — текстовые узлы, содержащие только символ-разделитель (whitespace). Теперь самое время заняться ими.
Символ-разделитель
Пример XML-документа, с которым мы до сих пор работали, выровнен так, чтобы показать иерархическую структуру его элементов:
>
>
>
>
> Earthquakes for Lunch
>
>
> Volcanoes for Dinner
>
>
>
Однако, с точки зрения XSLT, символы-разделители, используемые для выравнивания элементов, в действительности являются текстовыми узлами. Это означает, что по умолчанию эти пробелы будут скопированы в выходной документ. Понимание принципов работы XSLT с разделителями всегда вызывает большую путаницу, поэтому мы кратко рассмотрим здесь, как обрабатывать символы-разделители, и подробно займемся этим в следующей главе.
В XSLT существует четыре символа-разделителя: пробел, возврат каретки, перевод строки и табуляция. Все эти символы трактуются как разделители. Таким образом, с точки зрения процессора XSLT, входной документ выглядит так:
>
>
>.
>..
>...Earthquakes for Lunch
>..
>..
>...Volcanoes for Dinner
>..
>.
>
Все разделители между элементами трактуются в XSLT как текстовые узлы, содержащие символ-разделитель. Это означает, что в нашу диаграмму нам нужно добавить пять текстовых узлов с символом-разделителем: один перед элементом >
, один после элемента >
, и точно так же один перед элементом >
, один после и один между элементами:
> root
> |
> element:
> |
> |-------------------|------------|
> | | |
> text: whitespace element:
> |
> |-------------------|-------------|-------------------|-------------|
> | | | | |
>text: whitespace element:
> | |