Онлайн-редактирование XML-документов с использованием XSL и ASP.
Автор:Eve Cole
Время обновления:2009-06-23 16:38:26
В этой статье на подробном примере объясняется метод онлайн-редактирования данных XML-документа. Поскольку поддержка XML в Netscape относительно слаба, для обеспечения межплатформенного обмена данными обработка данных должна выполняться на стороне сервера. Чтобы отредактировать XML-документ, первое, что нужно сделать, — это извлечь и отобразить данные посетителям. XSL предоставляет нам хорошее решение для отображения XML-файлов. В следующем примере таблица стилей XSL используется для отображения XML-документа, который пользователи могут редактировать, а затем отправляет отредактированные данные на сервер, где данные обновляются на стороне сервера. ASP (Active Server Pages) используется здесь для выполнения наших задач.
Сначала загрузите документ XML, который мы хотим отредактировать. Используя объектную модель документа Microsoft (объект Microsoft XMLDOM) и XSL, документ XML можно преобразовать на стороне сервера в содержимое файла HTML, которое можно отобразить на стороне клиента. Давайте сначала посмотрим, как выглядят файлы XML и XSL, которые мы используем.
XML-файл: userdata.xml.
<?xml version="1.0"coding="gb2312"?>
<Профиль пользователя>
<field id="Имя" taborder="1">
<field_value>Мэн-цзы</field_value>
</поле>
<field id="пол" taborder="2">
<field_value>Мужской</field_value>
</поле>
<field id="Название организации" taborder="3">
<field_value>Пекинский филиал Китайской корпорации развития сетевых технологий</field_value>
</поле>
<field id="Подробный адрес" taborder="4">
<field_value>102-й этаж, Керри-центр, Пекин</field_value>
</поле>
<field id="Телефон" taborder="5">
<field_value>1391139136*</field_value>
</поле>
<field id="email" taborder="6">
<field_value>[email protected]</field_value>
</поле>
</профиль пользователя>
'www.knowsky.com
XSL-файл: userdata.xsl.
<?xml version="1.0"coding="gb2312" ?>
<xsl:stylesheet xmlns:xsl=" http://www.w3.org/TR/WD-xsl ">
<xsl:template match="/">
<html>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<тело>
<form Method="post" action="Edituserdata.asp">
<h1>Редактирование профиля пользователя:</h1>
<table border="1" cellpadding="2">
<xsl:for-each select="Профиль/поле пользователя">
<тр>
<тд>
<xsl:value-of select="@id"/>
</td>
<тд>
<input type="text"> <xsl:attribute name="id"> <xsl:value-of select="@id" /> </xsl:attribute> <xsl:attribute name="name"><xsl :value-of select="@id" /></xsl:attribute> <xsl:attribute name="value"> <xsl:value-of select="field_value" /> </xsl:attribute></input >
</td>
</tr>
</xsl:for-each>
</таблица>
<br />
<input type="submit" id="btnSubmit" name="btnSubmit" value="Завершить редактирование" />
</форма>
</тело>
</html>
</xsl:шаблон>
</xsl:таблица стилей>
В файле XSL используется элемент XSL:for-each для обхода всего файла XML. Атрибут «id» каждого элемента «field» в файле XML соответствует «id» и «имени» поля ввода текста. HTML-форма. Таким образом, поле ввода текста HTML-формы отображает значение элемента XML-файла. Этот файл отвечает за преобразование XML-документов на стороне сервера, чтобы их можно было отображать в различных браузерах.
Ниже приведена ключевая программа, которая реализует функцию открытия и обновления XML-документов и решает, следует ли обновлять, в зависимости от того, отправлена ли форма или нет. Он содержит две функции: loadXMLFile отвечает за загрузку и преобразование отображаемого XML-файла; функция updateXML отвечает за обновление XML-файла.
Программа Edituserdata.asp выглядит следующим образом:
<%
''---------------------------------------------------------------- ----------
''Определим функцию loadXMLFile(), которая получает два параметра:
''strXMLFile - путь и имя XML-файла.
''strXSLFilee — путь и имя файла XSL.
''www.knowsky.com
''---------------------------------------------------------------- ----------
Функция loadXMLFile(strXMLFile, strXSLFile)
''Объявляем локальные переменные
Тусклый объект objXML
Тусклый объект objXSL
''Создайте экземпляр объекта XMLDOM для загрузки файлов XML.
set objXML = Server.CreateObject("Microsoft.XMLDOM")
''Отключите режим асинхронной загрузки файлов.
objXML.async = ложь
''Загрузить XML-файл!
objXML.load(strXMLFile)
''Создайте экземпляр объекта XMLDOM для загрузки файла XSL.
set objXSL = Server.CreateObject("Microsoft.XMLDOM")
''Отключите режим асинхронной загрузки файлов.
objXSL.async = ложь
''Загрузить XSL-файл!
objXSL.load(strXSLFile)
''Используйте метод TransformNode XMLDOM, чтобы применить таблицу стилей XSL к XML-документу и затем вывести ее клиенту.
Response.Write(objXML.transformNode(objXSL))
Конечная функция
''---------------------------------------------------------------- ------------------
''Функция updateXML() получает один параметр: strXMLFile - путь и имя XML-файла.
''---------------------------------------------------------------- ------------------
Функция updateXML(strXMLFile)
''Объявляем локальные переменные.
Тусклый объект
Тусклый objRoot
Тусклое поле объекта
Тусклый х
''Создайте экземпляр объекта XMLDOM.
set objDOM = Server.CreateObject("Microsoft.XMLDOM")
''Отключите режим асинхронной загрузки файлов.
objDOM.async = ложь
''Загрузите XML-файл.
objDOM.load стрXMLFile
''Установим корневой элемент.
Установите objRoot = objDom.documentElement
''Пройдите по коллекции FORM и запишите отправленные данные в XML-файл.
Для x = 1 для Request.Form.Count
''Проверьте, содержат ли отправленные данные кнопку. Если да, игнорируйте эти данные.
Если instr(1,Request.Form.Key(x),"btn") = 0 Тогда
''В соответствии с режимом запроса XSL установите переменную objField и сопоставьте элементы формы с соответствующими элементами [field_value] в XML-документе.
Установите objField = objRoot.selectSingleNode("field[@id=''" & Request.Form.Key(x) & "'']/field_value")
'' Соответствует данным, представленным формой, значениям узла в XML-документе.
objField.Text = Запрос.Форма(x)
Конец, если
Следующий
''Сохраните отредактированный XML-файл.
objDom.save стрXMLFile
''Освободите все ссылки на объект.
Установить objDom = Ничего
Установить objRoot = Ничего
Установить objField = Ничего
''Вызовите функцию loadXMLFile, чтобы отобразить клиенту только что отредактированный XML-файл с использованием таблицы стилей updateuserdata.xsl.
loadXMLFile strXMLFile,server.MapPath("updateduserdata.xsl")
Конечная функция
''Проверьте, успешно ли отправлена форма, если она отправлена, обновите XML-файл, в противном случае перейдите в состояние редактирования;
Если Request.Form("btnSubmit") = "" Тогда
loadXMLFile server.MapPath("userdata.xml"),server.MapPath("userdata.xsl")
Еще
updateXML server.MapPath("userdata.xml")
Конец, если
%>
Когда форма успешно отправлена, мы используем updateuserdata.xsl для отображения только что отредактированных данных.
updateuserdata.xsl выглядит следующим образом:
<?xml version="1.0"coding="gb2312" ?>
<xsl:stylesheet xmlns:xsl=" http://www.w3.org/TR/WD-xsl ">
<xsl:template match="/">
<html>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<тело>
<h1>Обновленная информация о пользователе следующая:</h1>
<table border="1" cellpadding="2">
<xsl:for-each select="Профиль/поле пользователя">
<тр>
<тд>
<xsl:value-of select="@id" />
</td>
<тд>
<xsl:value-of select="field_value" />
</td>
</tr>
</xsl:for-each>
</таблица>
<форма>
<input type="button" value="Return" onclick="history.go(-1)" />
</форма>
</тело>
</html>
</xsl:шаблон>
</xsl:таблица стилей>
Вышеупомянутое — это всего лишь простой пример кросс-платформенного приложения XML. В зависимости от конкретных потребностей мы можем написать более мощные программы для выполнения более сложной работы. Все программы были отлажены и пропущены в среде WIN98SE+PWS+IE5.5+Netscape 4.75+Netscape 6+MSXML3.DLL.