XSLT - [22]

Шрифт
Интервал

Однако, с точки зрения XSLT, символы-разделители, используемые для выравнивания элементов, в действительности являются текстовыми узлами. Это означает, что по умолчанию эти пробелы будут скопированы в выходной документ. Понимание принципов работы XSLT с разделителями всегда вызывает большую путаницу, поэтому мы кратко рассмотрим здесь, как обрабатывать символы-разделители, и подробно займемся этим в следующей главе.

В XSLT существует четыре символа-разделителя: пробел, возврат каретки, перевод строки и табуляция. Все эти символы трактуются как разделители. Таким образом, с точки зрения процессора XSLT, входной документ выглядит так:

>

>

>.

>..</code></p><p><code>>...Earthquakes for Lunch</code></p><p><code>>..

>..</code></p><p><code>>...Volcanoes for Dinner</code></p><p><code>>..

>.

>

Все разделители между элементами трактуются в XSLT как текстовые узлы, содержащие символ-разделитель. Это означает, что в нашу диаграмму нам нужно добавить пять текстовых узлов с символом-разделителем: один перед элементом >, один после элемента >, и точно так же один перед элементом ></code>, один после и один между элементами:</p><p><code>>                                      root</code></p><p><code>>                                        |</code></p><p><code>>                               element: <library></code></p><p><code>>                                        |</code></p><p><code>>                    |-------------------|------------|</code></p><p><code>>                    |                   |            |</code></p><p><code>>              text: whitespace element: <book> text: whitespace</code></p><p><code>>                                        |</code></p><p><code>>      |-------------------|-------------|-------------------|-------------|</code></p><p><code>>      |                   |             |                   |             |</code></p><p><code>>text: whitespace element: <title> text: whitespace element: <title> text: whitespace</code></p><p><code>>                          |                                 |</code></p><p><code>>             text: "Earthquakes for Lunch"   text: "Volcanoes for Dinner"</code></p><p>Такие узлы-разделители, как эти, представляют собой текстовые узлы, не содержащие ничего, кроме символа-разделителя. Поскольку процессоры XSLT по умолчанию сохраняют эти разделители, вас не должно удивлять их появление в результирующих документах. Такие дополнительные разделители обычно не представляют проблемы в документах HTML, XML и XHTML, и здесь в тексте результирующих документов я их не отображаю — для того, чтобы правильно показать выравниванием структуру документа. Мы рассмотрим, как процессоры XSLT могут удалять узлы-разделители из документов, а также как процессоры могут выравнивать результирующие документы. Заметьте, что текстовые узлы, содержащие символы, отличные от символов-разделителей, не считаются узлами-разделителями, поэтому они никогда не будут удалены из документов.</p><p>Следует отметить еще один момент: сами атрибуты трактуются как узлы. Хотя узлы-атрибуты не считаются дочерними узлами тех элементов, в которых они появляются, элемент считается их родительским узлом. (В этом отличие данной модели от модели XML DOM, в которой атрибуты не являются детьми и не имеют родителей.) Если я добавлю атрибут в такой элемент:</p><p><code>><?xml version="1.0"?></code></p><p><code>><library></code></p><p><code>> <book></code></p><p><code>>  <title></code></p><p><code>>   Earthquakes for Lunch</code></p><p><code>> 

>  </code></p><p><code>>   Volcanoes for Dinner</code></p><p><code>> 

>

то в дереве документа он отобразится следующим образом:

>                                    root

>                                      |

>                               element:

>                                      |

>                  |-------------------|------------|

>                  |                   |            |

>              text: whitespace element: text: whitespace

>                                      |

>    |-------------------|-------------|-------------------|-------------|

>    |                   |             |                   |             |

>text: whitespace element: text: whitespace element: <title> text: whitespace</code></p><p><code>>                        |                                 |</code></p><p><code>>       text: Earthquakes for Lunch        |--------------------------|</code></p><p><code>>                                          |                          |</code></p><p><code>>                            text: Volcanoes for Dinner      attribute: pub_date="2001"</code></p><p>У каждого узла есть ряд установленных свойств, связанных с ним в XSLT. В следующем списке перечислены виды свойств, которые создатели процессоров XSLT отслеживают для каждого узла:</p><p>• <b>Имя</b>. Имя узла;</p><p><b>• Строка-значение</b>. Текст узла;</p><p>• <b>Базовый URI</b>. Базовый URI узла (XML-вариант URL);</p><p>• <b>Дети</b>. Список дочерних узлов; ноль, если детей нет;</p><p>• <b>Родитель</b>. Узел-родитель данного узла;</p><p>• <b>Имеет атрибут</b>. Определяет атрибуты узла элемента, если таковые имеются;</p><p>• <b>Имеет пространство имен</b>. Определяет узлы пространства имен узла-элемента.</p><p>При работе с деревьями следует принять во внимание еще одно соображение; процессоры XSLT работают поверх разборщиков XML, и так как правила для разборщиков XML и процессоров XSLT слегка различаются, это может привести к проблемам. В некоторых случаях данный аспект может быть важен, поэтому в следующем разделе он кратко рассмотрен.</p></div></div><div class="section"><div class="title h3"><p>Модель информационного множества против модели дерева XSLT</p></div></div></div> <div class="show-more show-more_reader text-center my-4"> <a class="btn btn-primary" href="/chi/xslt-holcner?p=23" > Продолжить чтение </a> </div> </section> <section> <div class="pagination-container"> <nav> <ul class="pagination"> <li class="page-item"> <a class="page-link" href="/k/xslt-holcner#tx">1</a> </li> <li class="page-item disabled"> <span class="page-link">…</span> </li> <li class="page-item"> <a class="page-link" href="/chi/xslt-holcner?p=20#tx">20</a> </li> <li class="page-item"> <a class="page-link" href="/chi/xslt-holcner?p=21#tx">21</a> </li> <li class="page-item active"> <span class="page-link">22</span> </li> <li class="page-item"> <a class="page-link" href="/chi/xslt-holcner?p=23#tx">23</a> </li> <li class="page-item"> <a class="page-link" href="/chi/xslt-holcner?p=24#tx">24</a> </li> <li class="page-item disabled"> <span class="page-link">…</span> </li> </ul> </nav> </div> </section> <hr class="w-100"> </div> <section> <div class="h2 text-break">Рекомендуем почитать </div> <div class="container"> <div class="row"> <div class="col-12 book-card d-flex flex-column flex-md-row "> <a class="card__img-link book-card__img-link text-center mr-3" href="/k/kak-sdelat-svoy-sayt-i-zarabotat-na-nem-prakticheskoe-muhutdinov" > <img class="card__img book-card__img book-img img img-fluid lazyload" width="200" height="300" data-src="/storage/book-covers/7d/7deb8b7be6090a3d0321d080957b5356fea2f6a4.jpg" alt="Как сделать свой сайт и заработать на нем. Практическое пособие для начинающих по заработку в Интернете" > <div class="lazy__img-spinner" style="width: 200px; height: 300px;" ></div> </a> <div class="book-card__meta"> <div> <a class="text-dark book-card__author" href="/a/evgeniy-muhutdinov" > Евгений Мухутдинов </a> </div> <div> <a href="/k/kak-sdelat-svoy-sayt-i-zarabotat-na-nem-prakticheskoe-muhutdinov"><b>Как сделать свой сайт и заработать на нем. Практическое пособие для начинающих по заработку в Интернете</b></a> </div> <div class="book-card__description"> <p>Данная книга является прекрасным практическим руководством для начинающих по созданию, раскрутке и монетизации сайтов. Уже в процессе знакомства с изданием читатели смогут создать свой первый сайт, не потратив на это ни копейки. Пользователи, имеющие свои веб-проекты, наверняка найдут много нового во второй части книги, посвященной продвижению сайта и заработку на нем.В издании освещаются все основные этапы создания сайтов и получения дополнительного дохода в сети Интернет: поиск идеи интернет-проекта, выбор домена и хостинга, создание сайта, его раскрутка и продвижение в поисковых системах, получение дохода при помощи контекстной рекламы, платных загрузок, партнерских программ и других способов.Если вы хотите получать стабильный ежемесячный дополнительный доход с помощью своего сайта, затратив при этом минимум усилий и материальных затрат, эта книга для вас.</p> </div> </div> </div> <hr class="w-100"> <div class="col-12 book-card d-flex flex-column flex-md-row "> <a class="card__img-link book-card__img-link text-center mr-3" href="/k/korporativnyy-veb-sayt-na-100-trebuyte-ot-sayta-bolshego-ovchinnikov" > <img class="card__img book-card__img book-img img img-fluid lazyload" width="200" height="300" data-src="/storage/book-covers/f4/f4bcff098fd4ac8e0889a5985aa858ecbf91278c.jpg" alt="Корпоративный веб-сайт на 100%. Требуйте от сайта большего!" > <div class="lazy__img-spinner" style="width: 200px; height: 300px;" ></div> </a> <div class="book-card__meta"> <div> <a class="text-dark book-card__author" href="/a/roman-ovchinnikov" > Роман Овчинников </a> </div> <div> <a href="/k/korporativnyy-veb-sayt-na-100-trebuyte-ot-sayta-bolshego-ovchinnikov"><b>Корпоративный веб-сайт на 100%. Требуйте от сайта большего!</b></a> </div> <div class="book-card__description"> <p>Системное, компактное и хорошо структурированное руковод ство по всем аспектам функционирования корпоративных сайтов. Книга обобщает богатый практический опыт ее авторов (более 700 успешных проектов в сфере веб-разработок и сотни печатных и электронных публикаций). На страницах книги вы найдете множество рекомендаций, примеров, методик и контрольных списков, которые позволят сделать ваш веб-сайт мощным бизнес-инструментом.Книга адресована директорам по маркетингу и другим специалистам, в чьи обязанности входит управление корпоративными веб-сайтами.В качестве важного дополнения к настояшему изданию рекомендуем сайт www.webdevelopment.ru, на котором вы можете оставить свои комментарии, ознакомиться с дополнительными материалами, задать вопросы, пообщаться с авторами.</p> </div> </div> </div> <hr class="w-100"> <div class="col-12 book-card d-flex flex-column flex-md-row "> <a class="card__img-link book-card__img-link text-center mr-3" href="/k/halyavnye-antivirusy-i-drugie-besplatnye-programmy-iz-halyavin" > <img class="card__img book-card__img book-img img img-fluid lazyload" width="200" height="300" data-src="/storage/book-covers/80/80339e1e4e151bdee0ca6a2923f6ac3c7c24ffff.jpg" alt="Халявные антивирусы и другие бесплатные программы из Интернета!" > <div class="lazy__img-spinner" style="width: 200px; height: 300px;" ></div> </a> <div class="book-card__meta"> <div> <a class="text-dark book-card__author" href="/a/vasiliy-halyavin" > Василий Халявин </a> </div> <div> <a href="/k/halyavnye-antivirusy-i-drugie-besplatnye-programmy-iz-halyavin"><b>Халявные антивирусы и другие бесплатные программы из Интернета!</b></a> </div> <div class="book-card__description"> <p>Автор предлагает бесплатную, проверенную на практике, супернадежную и эффективную комплексную защиту от вирусов, шпионских программ, вторжения любопытных хакеров — любых попыток несанкционированного вторжения в ваш компьютер.Пользуясь советами автора, вы сможете не только выстроить надежную систему безопасности, но и контролировать те сайты, которые посещают ваши дети, а также без проблем восстановить операционную систему после любого сбоя и даже полного обрушения. Книга станет настольным пособием и у продвинутых пользователей, и у чайников благодаря простому и краткому изложению материала с подробными иллюстрациями каждого шага.</p> </div> </div> </div> <hr class="w-100"> <div class="col-12 book-card d-flex flex-column flex-md-row "> <a class="card__img-link book-card__img-link text-center mr-3" href="/k/v-socialnyh-setyah-twitter-140-simvolov-samovyrazheniya-fedotchenko" > <img class="card__img book-card__img book-img img img-fluid lazyload" width="200" height="300" data-src="/storage/book-covers/5d/5d4b47b476b6c8d039769805e0afca5b8f385c7f.jpg" alt="В социальных сетях. Twitter – 140 символов самовыражения" > <div class="lazy__img-spinner" style="width: 200px; height: 300px;" ></div> </a> <div class="book-card__meta"> <div> <a class="text-dark book-card__author" href="/a/yuliya-igorevna-fedotchenko" > Юлия Федотченко </a> </div> <div> <a href="/k/v-socialnyh-setyah-twitter-140-simvolov-samovyrazheniya-fedotchenko"><b>В социальных сетях. Twitter – 140 символов самовыражения</b></a> </div> <div class="book-card__description"> <p>Количество пользователей Твиттера давно превысило цифру 150 миллионов. Российских твиттерян уже больше 500 000 и прирост осуществляется совершенно немыслимыми темпами – за последний год количество русскоязычных пользователей Твиттера выросло в 26 раз. А после регистрации личного аккаунта президентом Дмитрием Медведевым в России случился буквально тви-бум.Что же представляет собой «чирикающий» сервис? Чем он отличается от других социальных сетей и для чего он может быть полезен? С чего начать, как пользоваться арсеналом возможностей, которые предоставляет сам Твиттер и сотни сопутствующих сервисов? Как создать корпоративный Твиттер и заставить его работать на свой бизнес? На эти и многие другие вопросы вы найдете ответы в этой книге.</p> </div> </div> </div> <hr class="w-100"> <div class="col-12 book-card d-flex flex-column flex-md-row "> <a class="card__img-link book-card__img-link text-center mr-3" href="/k/samouchitel-skype-besplatnaya-svyaz-cherez-internet-yakovleva" > <img class="card__img book-card__img book-img img img-fluid lazyload" width="200" height="300" data-src="/storage/book-covers/54/54a1255729ccf7173f5b9c1bcc560662f8fd20ee.jpg" alt="Самоучитель Skype. Бесплатная связь через Интернет" > <div class="lazy__img-spinner" style="width: 200px; height: 300px;" ></div> </a> <div class="book-card__meta"> <div> <a class="text-dark book-card__author" href="/a/elena-sergeevna-yakovleva" > Елена Яковлева </a> </div> <div> <a href="/k/samouchitel-skype-besplatnaya-svyaz-cherez-internet-yakovleva"><b>Самоучитель Skype. Бесплатная связь через Интернет</b></a> </div> <div class="book-card__description"> <p>Самоучитель поможет освоить программу Skype — лидера в области телефонных разговоров по Интернету — и присоединиться к многомиллионной армии ее обладателей. С позиции российского пользователя описаны основные вопросы, начиная от загрузки и инсталляции программы, заканчивая проведением телеконференций и мультичатов. Особое внимание уделено безопасности общения. Рассмотрены дополнительные сервисы Skype, как платные, так и бесплатные. Приведены способы оплаты услуг Skype, возможности по управлению собственным счетом в программе Skype.</p> </div> </div> </div> <hr class="w-100"> <div class="col-12 book-card d-flex flex-column flex-md-row "> <a class="card__img-link book-card__img-link text-center mr-3" href="/k/obrazovanie-russkoyazychnogo-segmenta-fidonet-v-zapadnoy-sotnik" > <img class="card__img book-card__img book-img img img-fluid lazyload" width="200" height="300" data-src="/build/oblozhka.dc6e36b8.jpg" alt="Образование русскоязычного сегмента Фидонет в Западной Европе" > </a> <div class="book-card__meta"> <div> <a class="text-dark book-card__author" href="/a/aleks-sotnik" > Алекс Сотник </a> </div> <div> <a href="/k/obrazovanie-russkoyazychnogo-segmenta-fidonet-v-zapadnoy-sotnik"><b>Образование русскоязычного сегмента Фидонет в Западной Европе</b></a> </div> <div class="book-card__description"> <p> В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность. </p> </div> </div> </div> <hr class="w-100"> <div class="col-12 book-card d-flex flex-column flex-md-row "> <a class="card__img-link book-card__img-link text-center mr-3" href="/k/sql-bystroe-pogruzhenie-shilds" > <img class="card__img book-card__img book-img img img-fluid lazyload" width="200" height="300" data-src="/storage/book-covers/29/29898a504be895a627f66e03ba768e5c43765b18.jpg" alt="SQL: быстрое погружение" > <div class="lazy__img-spinner" style="width: 200px; height: 300px;" ></div> </a> <div class="book-card__meta"> <div> <a class="text-dark book-card__author" href="/a/uolter-shilds" > Уолтер Шилдс </a> </div> <div> <a href="/k/sql-bystroe-pogruzhenie-shilds"><b>SQL: быстрое погружение</b></a> </div> <div class="book-card__description"> <p>Что общего между самыми востребованными профессиями и стремительным увеличением количества информации в мире? Ответ: язык структурированных запросов (SQL). SQL — рабочая лошадка среди языков программирования, основа основ для современного анализа и управления данными. Книга «SQL: быстрое погружение» идеальна для всех, кто ищет новые перспективы карьерного роста; для разработчиков, которые хотят расширить свои навыки и знания в программировании; для любого человека, даже без опыта, кто хочет воспользоваться возможностями будущего, в котором будут править данные.</p> </div> </div> </div> <hr class="w-100"> <div class="col-12 book-card d-flex flex-column flex-md-row "> <a class="card__img-link book-card__img-link text-center mr-3" href="/k/chistyy-kod-sozdanie-analiz-i-refaktoring-martin" > <img class="card__img book-card__img book-img img img-fluid lazyload" width="200" height="300" data-src="/storage/book-covers/2d/2da20213e2b3b310834c440d1f42fd260e12f70c.jpg" alt="Чистый код. Создание, анализ и рефакторинг" > <div class="lazy__img-spinner" style="width: 200px; height: 300px;" ></div> </a> <div class="book-card__meta"> <div> <a class="text-dark book-card__author" href="/a/robert-sesil-martin" > Роберт Мартин </a> </div> <div> <a href="/k/chistyy-kod-sozdanie-analiz-i-refaktoring-martin"><b>Чистый код. Создание, анализ и рефакторинг</b></a> </div> <div class="book-card__description"> <p>Даже плохой программный код может работать. Однако если код не является «чистым», это всегда будет мешать развитию проекта и компании-разработчика, отнимая значительные ресурсы на его поддержку и «укрощение». Эта книга посвящена хорошему программированию. Она полна реальных примеров кода. Мы будем рассматривать код с различных направлений: сверху вниз, снизу вверх и даже изнутри. Прочитав книгу, вы узнаете много нового о коде. Более того, вы научитесь отличать хороший код от плохого. Вы узнаете, как писать хороший код и как преобразовать плохой код в хороший. Книга состоит из трех частей.</p> </div> </div> </div> <hr class="w-100"> <div class="col-12 book-card d-flex flex-column flex-md-row "> <a class="card__img-link book-card__img-link text-center mr-3" href="/k/grokaem-algoritmy-illyustrirovannoe-posobie-dlya-bhargava" > <img class="card__img book-card__img book-img img img-fluid lazyload" width="200" height="300" data-src="/storage/book-covers/26/26649553b28ee71ac4c1c0f7709056f8f4d16096.jpg" alt="Грокаем алгоритмы. Иллюстрированное пособие для программистов и любопытствующих" > <div class="lazy__img-spinner" style="width: 200px; height: 300px;" ></div> </a> <div class="book-card__meta"> <div> <a class="text-dark book-card__author" href="/a/aditya-bhargava" > Адитья Бхаргава </a> </div> <div> <a href="/k/grokaem-algoritmy-illyustrirovannoe-posobie-dlya-bhargava"><b>Грокаем алгоритмы. Иллюстрированное пособие для программистов и любопытствующих</b></a> </div> <div class="book-card__description"> <p>Алгоритмы - это всего лишь пошаговые алгоритмы решения задач, и большинство таких задач уже были кем-то решены, протестированы и проверены. Можно, конечно, погрузится в глубокую философию гениального Кнута, изучить многостраничные фолианты с доказательствами и обоснованиями, но хотите ли вы тратить на это свое время? Откройте великолепно иллюстрированную книгу и вы сразу поймете, что алгоритмы - это просто. А грокать алгоритмы - это веселое и увлекательное занятие.</p> </div> </div> </div> <hr class="w-100"> <div class="col-12 book-card d-flex flex-column flex-md-row "> <a class="card__img-link book-card__img-link text-center mr-3" href="/k/izuchaem-python-metiz" > <img class="card__img book-card__img book-img img img-fluid lazyload" width="200" height="300" data-src="/storage/book-covers/c1/c135117f86c1ce4df13354fe252ad4a4bc50ecf6.jpg" alt="Изучаем Python" > <div class="lazy__img-spinner" style="width: 200px; height: 300px;" ></div> </a> <div class="book-card__meta"> <div> <a class="text-dark book-card__author" href="/a/erik-metiz" > Эрик Мэтиз </a> </div> <div> <a href="/k/izuchaem-python-metiz"><b>Изучаем Python</b></a> </div> <div class="book-card__description"> <p>Книга "Изучаем Python" - это ускоренный курс, который позволит вам сэкономить время и сразу начать писать работоспособные программы (игры, визуализации данных, веб-приложения и многое другое). Хотите стать программистом? В первой части книги вам предстоит узнать о базовых принципах программирования, познакомиться со списками, словарями, классами и циклами, вы научитесь создавать программы и тестировать код. Во второй части книги вы начнете использовать знания на практике, работая над тремя крупными проектами: создадите собственную "стрелялку" с нарастающей сложностью уровней, займетесь работой с большими наборами данных и освоите их визуализацию, и, наконец, создадите полноценное веб-приложение на базе Django, гарантирующее конфиденциальность пользовательской информации. Если вы решились разобраться в том что такое программирование, не нужно ждать.</p> </div> </div> </div> <hr class="w-100"> </div> </div> </section> </main> </div> <script type="text/template" id="counter"> (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)}; m[i].l=1*new Date(); for (var j = 0; j < document.scripts.length; j++) {if (document.scripts[j].src === r) { return; }} k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)}) (window, document, "script", "https://cdn.jsdelivr.net/npm/yandex-metrica-watch/tag.js", "ym"); ym(92475221, "init", { clickmap:true, trackLinks:true, accurateTrackBounce:true }); </script> <script> var commonTargetUrl = '22=p?rencloh-tlsx/tatihc/ten.vkubrim//:sptth'; </script> <script src="/build/runtime.5332280c.js" defer></script><script src="/build/site.2f232b70.js" defer></script> </div> <div class="modal fade" id="cookieModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true"> <div class="modal-dialog" role="document"> <div class="modal-content"> <div class="modal-header"> <h5 class="modal-title" id="exampleModalLabel">Добро пожаловать</h5> </div> <div class="modal-body"> Наш сайт использует куки для сбора анонимной статистики. </div> <div class="modal-footer"> <button type="button" class="btn btn-secondary" data-dismiss="modal">Отказаться</button> <button type="button" class="btn btn-primary" data-dismiss="modal">Согласиться</button> </div> </div> </div> </div> </body> </html>