Казахстан, Алматы, Гимназия им. Ахмета Байтурсынова №139, 2008 |
Отображение содержимого XML-документов
Презентацию к данной лекции Вы можете скачать здесь.
Отображение данных с помощью элемента управления Xml
Рассмотрим, каким образом можно отобразить содержимое XML-документа на web-странице с помощью серверного элемента управления ASP.NET Xml и преобразования XSLT.
Чтобы отобразить сведения из XML-файла на web-странице, необходимо предоставить сведения о форматировании и отображении. Кроме того, необходимо предоставить инструкции относительно размещения данных из XML-файла. Например, можно отобразить каждый элемент из XML-файла в виде одной строки таблицы.
Для этих целей обычно используется язык XSL-преобразований для создания XSL-файлов. XSL-преобразования содержат следующие сведения.
- Шаблон, аналогичный HTML-странице. Данный шаблон указывает способ отображения информации из XML-файла.
- Инструкции XSL-преобразования, предоставляющие точную информацию о том, как сведения из XML-файла должны размещаться в шаблоне.
Можно определить несколько преобразований и затем применить их к одному и тому же XML-файлу.
После создания XSL-преобразований необходимо применить их к XML-файлу. При этом XML-файл обрабатывается путем его преобразования в соответствии с одним из XSL-файлов.
Этот процесс лучше делать с помощью серверного элемента управления Xml, выполняющего роль "местозаполнителя" на ASP.NET-странице. Можно указать в его свойствах определенный XML-файл и XSL-преобразование. При обработке страницы элемент управления выполняет чтение XML-файла, применяет преобразование и отображает результат.
Предположим, у нас есть xml-файл, в котором содержатся сведения о товарах. Нам нужно иметь возможность отображать как все данные целиком, так и лишь заголовки. Для этого мы создадим два файлы XLS-преобразования, один XML-файл и одну ASP.NET- страницу [1].
Запускаем Visual Web Developer. Создаем XML-файл и сохраняем его в папке App_Data.
<?xml version="1.0" encoding="windows-1251" ?> <Products> <Product id="101"> <ProductName>Sharp LC-32 LE600 RU</ProductName> <Price>38990 руб.</Price> <Manufacturer>Польша</Manufacturer> <Warranty>3 года</Warranty> <Description> Серия ЖК телевизоров c оригинальной "шарповской" Full HD панелью 10-го поколения и светодиодной подсветкой Full LED. </Description> </Product> <Product id="109"> <ProductName>Samsung UE-32 B6000</ProductName> <Price>39900 руб.</Price> <Manufacturer>Россия</Manufacturer> <Warranty>2 года</Warranty> <Description> Элегантный Samsung UE-32 B6000, оснащенный технологией устранения бликов Ultra Clear Panel, поможет вам превратить свою гостиную в уютный кинозал. Благодаря использованию светодиодов (LED) для подсветки вместо обычных люминесцентных ламп толщина этого телевизора составляет всего 3 см. </Description> </Product> <Product id="123"> <ProductName>Philips 42PFL9803H/10</ProductName> <Price>99900 руб.</Price> <Manufacturer>Бельгия</Manufacturer> <Warranty>1 год</Warranty> <Description> Погрузитесь в мир незабываемых впечатлений с 42-дюймовым широкоформатным телевизором Philips 42PFL9803H/10. Новая технология Ambilight Spectra 2, которая используется в нем, добавит яркости и четкости изображению, а LED Lux передаст всю цветовую гамму изображения максимально естественно. </Description> </Product> </Products>
Теперь добавим в проект два XSL-преобразования: , с помощью которого на экран будут выводиться все данные и (выводит только заголовки). Оба файла нужно сохранить в папке App_Data.
<?xml version='1.0'?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:template match="/"> <html> <body> <table cellspacing="10" cellpadding="4"> <xsl:for-each select="Products/Product"> <tr bgcolor="#CCCCCC"> <td class="info"> Название товара: <strong> <xsl:value-of select="ProductName"/> </strong> <br /><br /> Цена: <strong> <xsl:value-of select="Price"/> </strong> <br /><br /> Страна-производитель: <strong> <xsl:value-of select="Manufacturer"/> </strong> <br /><br /> Гарантия: <strong> <xsl:value-of select="Warranty"/> </strong> <br /><br /> <br /><br /> <xsl:value-of select="Description"/> </td> </tr> </xsl:for-each> </table> </body> </html> </xsl:template> </xsl:stylesheet>
<?xml version='1.0'?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:template match="/"> <html> <body> <table cellspacing="3" cellpadding="8"> <tr bgcolor="#AAAAAA"> <td class="heading"> <strong>Название товара</strong> </td> <td class="heading"> <strong>Цена</strong> </td> <td class="heading"> <strong>Страна-производитель</strong> </td> </tr> <xsl:for-each select="Products/Product"> <tr bgcolor="#DDDDDD"> <td width="25%" valign="top"> <xsl:value-of select="ProductName"/> </td> <td width="20%" valign="top"> <xsl:value-of select="Price"/> </td> <td width="55%" valign="top"> <strong> <xsl:value-of select="Manufacturer"/> </strong> </td> </tr> </xsl:for-each> </table> </body> </html> </xsl:template> </xsl:stylesheet>
Добавим к проекту ASP.NET-страницу. Из панели инструментов перетащим элемент управления Xml и настроим его таким образом, чтобы свойство DocumentSource стало равно "~/Products.xml", а свойство TransformSource стало равно "~/App_Data/Products_headers.xslt".
Дале, нам нужно разместить элемент управления CheckBox выше элемента управления Xml. У элемента управления CheckBox свойство Text нужно сделать равным "Только заголовки", Свойство checked - True, AutoPostBack - тоже True. Дважды щелкнем по элементу управления Checkbox и введем в обработчике событий следующий код:
If CheckBox1.Checked Then Xml1.TransformSource = "~/App_Data/Products_headers.xslt" Else Xml1.TransformSource = "~/App_Data/Products_all.xslt" End If
Запустив проект, мы получим следующий результат: