Опубликован: 20.02.2006 | Доступ: свободный | Студентов: 3341 / 383 | Оценка: 4.34 / 3.99 | Длительность: 21:22:00
ISBN: 978-5-9570-0022-1
Лекция 12:

Программирование на ASP

< Лекция 11 || Лекция 12: 123456789

Работа с XML

Одной из технологий, применяемых для обобщения логики отображения, является язык XML. XML – это не разновидность кода, хотя многие программисты говорят, что умеют программировать на XML. XML на самом деле представляет собой иерархический формат, используемый для описания данных с помощью текста. Данные, описываемые с помощью XML, имеют множество преимуществ по сравнению с другими форматами хранения данных. Текст XML распознается и обрабатывается всеми операционными системами. С другой стороны, XML понятен и человеку. XML обрабатывается и конструируется с помощью общего набора правил, задокументированных для множества потенциальных потребителей XML.

XML имеет и свои недостатки: ему требуется гораздо больший объем пространства для хранения данных по сравнению с другими технологиями (формат с разделителями-запятыми или текст фиксированной ширины). XML требует много ресурсов для обработки и упорядочивания данных. Для иллюстрации преимуществ и недостатков сравним файл XML с текстовым файлом с разделителями-запятыми. Оба файла являются текстовыми и используются в любой операционной системе. Оба файла являются результатом упорядочивания информации в таблице базы данных в соответствующий формат данных. Файл XML примерно в 3 – 5 раз больше, чем версия того же набора данных в формате текстового файла с разделителями-запятыми, так как в последнем не используются элементы описания для каждой строки и значения данных, как в файле XML. Обработка файла XML занимает больше времени в зависимости от того, насколько его размер больше файла с разделителями-запятыми.

Рассмотрим ситуацию, когда XML-файл и файл с разделителями-запятыми отправляются сторонним потребителям, и в таблицу базы данных добавляется еще один столбец. В файл с разделителями-запятыми добавится еще один столбец с любой стороны от текста или в его середине, в зависимости от логики экспорта, использованной для создания этого файла. Файл XML также будет содержать дополнительные данные, но, поскольку каждое значение данных в нем определено явным образом, то при использовании файла потребителем не возникнет ошибки, пока потребитель руководствуется установленными правилами. А программное обеспечение, обрабатывающее файл с разделителями-запятыми, вызовет ошибку, поскольку формат файла не совпадет с тем, что "ожидало" приложение.

Преобразование с помощью XSL

XML обобщает логику отображения, разрешая существование этой логики в другом файле. При помощи программного обеспечения, комбинирующего XML и логику отображения посредством установленного набора инструкций, XML можно преобразовать в другой тип документа, например, в HTML. Известными наборами инструкций являются Extensible Slylesheet Language (XSL) (Расширяемый язык таблиц стилей) и Extensible Stylesheet Language Transformation (XSLT) (Преобразование расширяемого языка таблиц стилей). С помощью обобщения логики отображения программисты разрабатывают веб-приложения для создания документов XML, предназначенных для описания данных или некоторого объекта. Пользовательский интерфейс можно изменять по мере необходимости, корректируя код только в файлах XSL или XSLT.

В листинге 12.11 приведен пример простого преобразования, реализованного в ASP.

<%@ Language=VBScript %>
<HTML>
<HEAD>
</HEAD>
<BODY>
<%

dim oXMLDoc
dim oXMLXSL

    Set oXMLDoc = Server.CreateObject("Microsoft.XMLDOM")
    Set oXMLXSL = Server.CreateObject("Microsoft.XMLDOM")

     oXMLDoc.load(Server.MapPath("employees.xml"))     
     oXMLXSL.load(Server.MapPath("employeesDisplay.xsl"))
          
     Response.Write( oXMLDoc.transformNode(oXMLXSL) )

%>
</BODY>
</HTML>
Листинг 12.11. XMLToHTML.asp - Simple XML to HTML Transformation Performed in an ASP

Страница XMLtoHTML.asp (см. листинг 12.11) создает экземпляр класса XMLDOM. Класс XMLDOM является частью библиотеки Microsoft MSXML, используемой для преобразования XML и XSL в HTML. MSXML содержит набор классов и других программных решений, обеспечивающих XML-обработку, проверку, конструирование и прочие полезные функции XML. Функция загрузки класса XMLDOM вызывается указанием полного имени файла в качестве аргумента функции. Загружаемый файл расположен в корневом веб-каталоге, поэтому для получения полного физического пути и имени XML-файла вызвана функция Server.MapPath. Функция загрузки класса XMLDOM обрабатывает в качестве аргумента строку, содержащую документ XML или полное имя файла.

В листинге 12.12 приведено содержимое загруженного файла XML.

<?xml version="1.0"?>
<Recordset Table = "MyMembership" 
           Command = "Select * From tblEmployee">
     <Row number = "3" phone = "444-4444" 
           first_name = "Susy" last_name = "Lipschitz" />
     <Row number = "4" phone = "444-555" 
           first_name = "Bertan" last_name = "Scudder" />
     <Row number = "6" phone = "444-4444 " 
           first_name = "Joe" last_name = "Schmidlap" />
     <Row number = "8" phone = "444-4444 " 
           first_name = "Tom" last_name = "Cleasak" />
</Recordset>
Листинг 12.12. employees.xml - tblEmployee Data Serialized into an XML Document

Этот документ представляет собой простой XML-файл, содержащий сведения о сотрудниках, извлеченные из таблицы tblEmployee (см. листинг 12.10).

Действия, аналогичные созданию экземпляра класса и загрузке документа XML, выполнены по отношению к таблице стилей XSL. XSL – это документ XML, и так же, как XML, воспринимается классом XMLDOM. В листинге 12.13 приведено содержимое файла XSL, загруженного в данном примере.

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:template match="/">

<xsl:for-each select="Recordset">

<P><xsl:value-of select="@Table"/>
<br/><xsl:value-of select="@Command"/><br/>
</P>

<TABLE BORDER="1" CELLSPACING="0" CELLPADDING="0">
     <TR>
          <TH>Number</TH>
          <TH>Phone</TH>
          <TH>First Name</TH>
          <TH>Last Name</TH>
     </TR>

     <xsl:for-each select="Row">
          <TR>
               <TD><xsl:value-of select="@number"/></TD>
               <TD><xsl:value-of select="@phone"/></TD>
               <TD><xsl:value-of select="@first_name"/></TD>
               <TD><xsl:value-of select="@last_name"/></TD>

          </TR>          
     </xsl:for-each>
               
</TABLE>
</xsl:for-each>

</xsl:template>
</xsl:stylesheet>
Листинг 12.13. employeesDisplay.xsl - XSL Stylesheet to Make HTML from tblEmployee XML Document

После загрузки документов XSL и XML в свои собственные экземпляры класса XMLDOM из экземпляра XMLDOM, связанного с документом XML, вызывается функция transformnode. Экземпляр класса XMLDOM, содержащий документ XSL, используется в качестве аргумента при вызове функции transformnode, а результирующей строкой, возвращаемой функцией transformnode, является документ HTML. На рисунке 12.13 представлен результат преобразования документов XSL и XML, отображенный в браузере.

Отображение данных браузером в результате преобразования формата XML в HTML

Рис. 12.13. Отображение данных браузером в результате преобразования формата XML в HTML

HTML-код, полученный из XML, приведен в листинге 12.12, а XSL, приведенный в листинге 12.13, в преобразованном состоянии показан в листинге 12.14.

<HTML>
<HEAD>
</HEAD>
<BODY>
<P>MyMembership
<br />Select * From tblEmployee<br />
</P>
<TABLE BORDER="1" CELLSPACING="0" CELLPADDING="0">
<TR>
<TH>Number</TH>
<TH>Phone</TH>
<TH>First Name</TH>
<TH>Last Name</TH>
</TR>
<TR>
<TD>3</TD>
<TD>444-4444</TD>
<TD>Susy</TD>
<TD>Lipschitz</TD>
</TR>
<TR>
<TD>4</TD>
<TD>444-555</TD>
<TD>Bertan</TD>
<TD>Scudder</TD>
</TR>
<TR>
<TD>6</TD>
<TD>444-4444</TD>
<TD>Joe</TD>
<TD>Schmidlap</TD>
</TR>
<TR>
<TD>8</TD>
<TD>444-4444</TD>
<TD>Tom</TD>
<TD>Cleasak</TD>
</TR>
</TABLE>

</BODY>
</HTML>
Листинг 12.14. HTML Resulting from XSL employeesDisplay.xsl and XML employees.xml Document Transformation
< Лекция 11 || Лекция 12: 123456789
Александр Тагильцев
Александр Тагильцев

Где проводится профессиональная переподготовка "Системное администрирование Windows"? Что-то я не совсем понял как проводится обучение.

Владимир Кирин
Владимир Кирин
Неполодки на ресурсе.При сдаче 7 теста, открывается пустое окно, и ничего не происходит.Поправте пожалуйста. При этом попытка считается защитана, перездача только через 30 мин. Использую браузер опера.
Александр Титов
Александр Титов
Россия, Москва
Игорь Соловьев
Игорь Соловьев
Россия, Братск