четверг, 30 декабря 2010 г.

Преобразование XML в шаблоне XSLT-функции

Функция, вызов которой мы добавили в нашу Demo.DisplayNews, возвращает данные в виде XML, каждый элемент которого представлен примерно так:


<News 
  Id="217ccac7-7bba-42a9-a693-daa2f39f1220"
  Title="News Title" 
  Date="2010-12-22T00:00:00"
  Summary="News Summary"
  Text="&lt;html xmlns='http://www.w3.org/1999/xhtml'&gt; &lt;head&gt;&lt;/head&gt; &lt;body&gt;New Body&lt;/body&gt; 
&lt;/html&gt;"
  xmlns=""
/>

Если переключиться на вкладку Preview редактора функций, то в панели Input можно увидеть именно так представленные элементы. Кроме того на этой вкладке можно увидеть как правильно обратиться в шаблоне к элементу типа данных через вызываемой функции:

<!-- Function Call Result (0 ms), XPath /in:inputs/in:result[@name='GetNewsXml']/News -->

Давайте воспользуемся полученной информацией, чтобы в шаблоне нашей функции, пройтись по каждому элементу и, используя XSLT, вывести значения полей типа данных нужным нам образом:
  1. На вкладке Template (шаблон) редактора функций, удаляем код разметки между тегами <body></body>
  2. Теперь между этими тегами добавьте такой код:


    <xsl:for-each select="/in:inputs/in:result[@name='GetNewsXml']/News">
      <p>
        <xsl:value-of select="@Title"/><br/>
        <xsl:value-of select="@Date"/><br/>
        <xsl:value-of select="@Summary"/>
      </p>
    </xsl:for-each>

  3. Сохраните функцию (Save).
Человеку знакомому с XSLT должно быть ясно, что происходит.

(Я намеренно не включил поле Text в вывод шаблона, потому что он содержит форматированный текст, который перед выводом нужно еще преобразовать - об этом я расскажу в другом сообщении.)

А если переключиться на вкладку Preview редактора функций, то в панели Output можно увидеть, что получится в результате работы шаблона XSLT.

Чтобы окончательно убедиться, что наша функция выводит данные из типа данных Demo.News именно так как мы указали в шаблоне, нужно добавить ее на страницу.

    Комментариев нет:

    Отправить комментарий