Опубликован: 20.02.2006 | Уровень: специалист | Доступ: платный
Лекция 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 мин. Использую браузер опера.
Александр Гордеев
Александр Гордеев
Казахстан, Алматы, ТУРАН
Александр Даниленко
Александр Даниленко
Россия, Москва, 797, 1993