В этой статье на подробном примере объясняется метод онлайн-редактирования данных 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"?>
<!-- отредактировано с помощью XMLSPY v2004 версии 4 U ( http://www.xmlspy.com ) Дикки (Apple'S Eden) -->
<Информация пользователя>
<Field ID="Имя" TabOrder="1">
<FieldValue>Дикки</FieldValue>
</Поле>
<Field ID="Пол" TabOrder="2">
<FieldValue>Мужской</FieldValue>
</Поле>
<Field ID="UnitName" TabOrder="3">
<FieldValue>Шанхайская компания Ateam</FieldValue>
</Поле>
<Field ID="Адрес" TabOrder="4">
<FieldValue>Шанхай, ZhongShan West Road 1800#, комната 26A</FieldValue>
</Поле>
<Field ID="Тел" TabOrder="5">
<FieldValue>13800138000</FieldValue>
</Поле>
<Field ID="EMail" TabOrder="6">
<FieldValue>[email protected]</FieldValue>
</Поле>
</UserInfo>
XSL-файл: UserData.xsl
<?xml version="1.0"coding="gb2312"?>
<!-- отредактировано с помощью XMLSPY v2004 версии 4 U ( http://www.xmlspy.com ) Дикки (Apple'S Eden) -->
<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 метод="post" action="EditUserData.asp">
<h1>Изменить информацию о пользователе:</h1>
<table border="1" cellpadding="2">
<xsl:for-each select="UserInfo/Field">
<тр>
<тд>
<xsl:value-of select="@ID"/>
</td>
<тд>
<входной тип="текст">
<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="FieldValue"/></xsl:attribute>
</вход>
</td>
</tr>
</xsl:for-each>
</таблица>
<br/>
<input type="submit" id="btnSubmit" name="btnSubmit" value="Edit"/>
</форма>
</тело>
</html>
</xsl:шаблон>
</xsl:stylesheet>
Файл XSL использует элемент XSL: for-each для обхода всего файла XML. Атрибут «id» каждого элемента «поле» в файле XML, а также «id» и «id» из него. поле текстового ввода имени HTML-формы». Таким образом, поле ввода текста HTML-формы отображает значение элемента XML-файла. Этот файл отвечает за преобразование XML-документов на стороне сервера, чтобы их можно было отображать в различных браузерах.
Ниже приведена ключевая программа, которая реализует функцию открытия и обновления XML-документов и решает, следует ли обновлять, в зависимости от того, отправлена ли форма или нет. Он содержит две функции: loadXMLFile отвечает за загрузку и преобразование отображаемого XML-файла; функция updateXML отвечает за обновление XML-файла.
Программа EditUserData.asp выглядит следующим образом:
<%
'------------------------------------------------ - ---------
'Определим функцию LoadXMLFile(), которая получает два параметра:
'strXMLFile — путь и имя файла XML. 'strXSLFilee — путь и имя файла XSL'------------------------- ------- ----------------------------------
Функция LoadXMLFile(strXMLFile, strXSLFile)
'Объявляем локальные переменные
Тусклый объект objXML
Тусклый объект objXSL
'Создайте экземпляр объекта XMLDOM для загрузки XML-файла.
Установите objXML = Server.CreateObject("Microsoft.XMLDOM")
'Отключаем режим асинхронной загрузки файлов.
objXML.Async = Ложь
'Загрузить XML-файл!
objXML.Load(strXMLFile)
'Создайте экземпляр объекта XMLDOM для загрузки файла XSL.
Установите 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.
Установите objDOM = Server.CreateObject("Microsoft.XMLDOM")
'Отключаем режим асинхронной загрузки файлов.
objDom.Async = Ложь
'Загрузить XML-файл.
objDom.Загрузить стр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) & "']/FieldValue")
'Сопоставьте данные, отправленные формой, со значениями узлов в XML-документе.
objField.Text = Запрос.Форма(x)
Конец, если
Следующий
'Сохраняем отредактированный XML-файл.
objDom.Сохранить стрXMLFile
'Освободить все ссылки на объект.
Установить objDom = Ничего
Установить objRoot = Ничего
Установить objField = Ничего
'Вызовите функцию LoadXMLFile, чтобы отобразить клиенту только что отредактированный XML-файл с помощью таблицы стилей UpdatedUserData.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")
Конец, если
%>
Если форма успешно отправлена, мы используем UpdatedUserData.xsl для отображения только что отредактированных данных.
UpdatedUserData.xsl имеет следующий вид:
<?xml version="1.0"coding="gb2312"?>
<!-- отредактировано с помощью XMLSPY v2004 версии 4 U ( http://www.xmlspy.com ) Дикки (Apple'S Eden) -->
<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="UserInfo/Field">
<тр>
<тд>
<xsl:value-of select="@ID"/>
</td>
<тд>
<xsl:value-of select="FieldValue"/>
</td>
</tr>
</xsl:for-each>
</таблица>
<форма>
<input type="button" value="Go Back" onclick="history.go(-1)"/>
</форма>
</тело>
</html>
</xsl:шаблон>
</xsl:stylesheet>
Вышеупомянутое — это всего лишь простой пример кросс-платформенного приложения XML. В зависимости от конкретных потребностей мы можем написать более мощные программы для выполнения более сложной работы. Все программы прошли отладку в среде Windows 2003 En+IIS 6.0+IE6.0+MSXML3.Dll.