Pull to refresh

Визуализация Xml-документов

XML *
Думаю, для многих не секрет, что xml является достаточно удобным способом хранения и передачи информации. Вот уже который раз натыкаюсь в литературе на утверждение, что в будущем xml должен заменить html, а появление xhtml является тому подтверждением. Но тут есть нюанс. все браузеры знают как отображать html-документы, но ни один из них не знает, как должны отображаться xml-документы. Это связано прежде всего с тем, что формируя xml-документ Вы можете ввести свои теги. Я хочу коротко (это очень большая тема, на самом деле) рассказать о так называемых «Таблицах преобразований xml-документов».
Думаю, что многие наверняка знакомы с ними, но надеюсь что кому-то это может быть полезно, а, учитывая мою любовь к практике, хочу показать всё на очень простом примере


Что мы имеем


Рассмотрим простенький xml-документ:
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <document>
  3.  <header>Это заголовок Xml-документа</header>
  4.  <items>
  5.   <item id="1">
  6.    <name>Habrahabr.ru</name>
  7.    <description>
  8.     В Хабрахабр заложена модель совместного творчества людей. Это
  9.     универсальное средство для всех представителей нового поколения
  10.     средств массовой информации.
  11.    </description>
  12.   </item>
  13.   <item id="2">
  14.    <name>Bash.org.ru</name>
  15.    <description>
  16.     Вы добавляете цитату. После этого цитата попадает в Бездну, где
  17.     ее могут увидеть и проголосовать за нее наши посетители, читающие
  18.     сей суровый раздел.
  19.    </description>
  20.   </item>
  21.  </items>
  22. </document>

Если мы попробуем просмотреть его в браузере, то увидим нечто подобное:


Существует несколько способов визуализировать содержимое этого документа.
К нему можно подключить обычную таблицу стилей (css-файл) или таблицу преобразований.
Таблица преобразований представляет из себя xml-документ, оформленный по определённым правилам и имеющий расширение .xslt.

Допустим нам нужно отобразить информацию, содержащуюся в xml-документе, для этого создадим таблицу преобразований (файл будет называться style.xslt):
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <xsl:stylesheet version="1.0"
  3. xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  4. xmlns:msxsl="urn:schemas-microsoft-com:xslt"
  5. exclude-result-prefixes="msxsl">
  6.  
  7.  <xsl:template match="document">
  8.   <html>
  9.    <head><title><xsl:value-of select="header" /></title></head>
  10.    <body><xsl:apply-templates select="items" /></body>
  11.   </html>
  12.  </xsl:template>
  13.  
  14.  <xsl:template match="items">
  15.   <ul><xsl:apply-templates select="item" /></ul>
  16.  </xsl:template>
  17.  
  18.  <xsl:template match="item">
  19.   <li><a>
  20.     <xsl:attribute name="href">
  21.      http:// <xsl:value-of select="name"/>
  22.     </xsl:attribute>
  23.     <xsl:value-of select="name"/>
  24.    </a> - <xsl:value-of select="description"/>
  25. <li> </xsl:template>
  26.  
  27. </xsl:stylesheet>


Подключить таблицу преобразований (к исходному xml-документу конечно же) можно следующим образом:
<?xml version=«1.0» encoding=«utf-8»?>
<?xml-stylesheet type=«text/xsl» href=«style.xslt»?>
В итоге, открыв тот же самый файл в браузере мы увидим следующее:



В двух словах, как это работает


В таблице преобразований описаны три шаблона: document, items и item. Когда в шаблоне встречается элемент xsl:apply-templates на его место подставляются то, что получится в результате обработки всех элементов, удовлетворяющих выражению select (я указывал просто названия тегов, хотя там могут быть достаточно сложные конструкции). Аналогично вставляются значения тегов (тег xsl:value-of) и атрибуты для тегов (тег xsl:attribute).

Шаблон document формирует основу html-страницы (теги html, head, body), а в них подставляются заголовок страницы и список элементов, формирующийся по шаблону items (Элементы списка формируются по шаблону items).

Всё преобразование делается на стороне клиента.

Это лишь малая доля того, что может предоставить технология таблиц преобразований. Visual Studio имеет удобный интерфейс по работе с ними, в том числе просмотр сгенерированного html.
Tags:
Hubs:
Total votes 61: ↑43 and ↓18 +25
Views 89K
Comments Comments 67