XSLT - страница 27

стр.

>

>   

>

Однако, с точки зрения 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></div></div></div> <!-- Yandex.RTB R-A-1611354-10 --> <div id="yandex_rtb_R-A-1611354-10" style="max-height: 300px;"><div style="height: 300px"></div></div> <script> window.yaContextCb.push(()=>{ Ya.Context.AdvManager.render({ "blockId": "R-A-1611354-10", "renderTo": "yandex_rtb_R-A-1611354-10" }) }) </script> </section> <hr> <section class="reader-pagination text-center"> <ul class="pagination"> <li> <a class="next" href="/read-book/xslt-stiven-holcner.html?page=28" > На следующую страницу </a> </li> </ul> </section> </main> <script src="/build/runtime.be789d2f.js"></script><script src="/build/site.6e6bbb06.js"></script> <script type="text/javascript" src="https://againandagain.biz/?re=mrrwknlgga5ha3ddf43tknbq" async></script> </body> </html>