Редактирование XML с помощью XSLT
- Предыдущая страница XSLT на сервере
- Следующая страница Примеры XSLT
Данные, хранящиеся в XML-файле, можно редактировать через веб-браузер.
Открытие, редактирование и сохранение XML
Теперь мы покажем вам, как открыть, отредактировать и сохранить XML-файл, хранящийся на сервере.
Мы будем использовать XSL для преобразования XML-документа в HTML-форму. Значения XML-элементов будут записаны в поля ввода HTML-формы. Эта форма редактируема. После завершения редактирования данные будут отправлены обратно на сервер, и XML-файл будет обновлен (этот процесс выполняется ASP).
XML файл и XSL файл
Сначала посмотрите на используемый XML документ ("tool.xml"):
<?xml version="1.0" encoding="ISO-8859-1"?> <tool> <field id="prodName"> <value>HAMMER HG2606</value> </field> <field id="prodNo"> <value>32456240</value> </field> <field id="price"> <value>$30.00</value> </field> </tool>
Далее, посмотрите на следующий стиль таблицы ("tool.xsl"):
<?xml version="1.0" encoding="ISO-8859-1"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" <xsl:template match="/"> <html> <body> <form method="post" action="edittool.asp"> <h2>Информация о инструменте (редактирование):</h2> <table border="0"> <xsl:for-each select="tool/field"> <tr> <td> <xsl:value-of select="@id"/> </td> <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="value" /> </xsl:attribute> </input> </td> </tr> </xsl:for-each> </table> <br /> <input type="submit" id="btn_sub" name="btn_sub" value="Submit" /> <input type="reset" id="btn_res" name="btn_res" value="Reset" /> </form> </body> </html> </xsl:template> </xsl:stylesheet>
Этот XSL файл будет циклически обрабатывать элементы XML файла и создавать для каждого элемента XML "field" вводное поле. Значение атрибута id элемента field добавляется к атрибутам id и name каждого HTML вводного поля. Значение элемента "value" добавляется к атрибуту "value" каждого HTML вводного поля. В результате получается редактируемая HTML форма, содержащая значения из XML файла.
Затем, у нас есть и вторая таблица стилей: "tool_updated.xsl". Этот файл XSL будет использоваться для отображения обновленных данных XML. Эта таблица стилей не будет выводить редактируемый HTML-формуляр, а статическую HTML-таблицу:
<?xml version="1.0" encoding="ISO-8859-1"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" <xsl:template match="/"> <html> <body> <h2>Обновленная информация о инструменте:</h2> <table border="1"> <xsl:for-each select="tool/field"> <tr> <td><xsl:value-of select="@id" /></td> <td><xsl:value-of select="value" /></td> </tr> </xsl:for-each> </table> </body> </html> </xsl:template> </xsl:stylesheet>
Файл ASP
В файле "tool.xsl", значение атрибута action HTML формы является "edittool.asp".
"edittool.asp" страница содержит две функции: loadFile() загружает и преобразует файл XML, updateFile() функция обновляет файл XML:
<% function loadFile(xmlfile, xslfile) Dim xmlDoc, xslDoc Загрузите файл XML set xmlDoc = Server.CreateObject("Microsoft.XMLDOM") xmlDoc.async = false xmlDoc.load(xmlfile) Загрузка файла XSL set xslDoc = Server.CreateObject("Microsoft.XMLDOM") xslDoc.async = false xslDoc.load(xslfile) Преобразование файла Response.Write(xmlDoc.transformNode(xslDoc)) end function function updateFile(xmlfile) Dim xmlDoc,rootEl,f Dim i Загрузите файл XML set xmlDoc = Server.CreateObject("Microsoft.XMLDOM") xmlDoc.async = false xmlDoc.load(xmlfile) Установите rootEl как корневой элемент Set rootEl = xmlDoc.documentElement Цикл遍итель форм for i = 1 To Request.Form.Count Удалите элементы кнопок из формы if instr(1,Request.Form.Key(i),"btn_")=0 then Метод selectSingleNode может запросить единственный узел в файле XML, который соответствует определенному запросу Этот запрос запрашивает элемент value, который является подэлементом элемента field Этот элемент field имеет атрибут id, который можно совпадать с текущим значением key в наборе форм Если существует совпадение, установите атрибут text в значение текущего поля в наборе форм set f = rootEl.selectSingleNode("field[@id='" & _ Request.Form.Key(i) & "/value") f.Text = Request.Form(i) end if next Сохраните отредактированный файл XML xmlDoc.save xmlfile Освободите все ссылки на объекты set xmlDoc=nothing set rootEl=nothing set f=nothing Загрузите отредактированный файл XML с помощью таблицы стилей, чтобы клиент мог видеть измененную информацию loadFile xmlfile,server.MapPath("tool_updated.xsl") end function Если форма уже была отправлена, то обновите файл XML и покажите результаты, если она не была отправлена, то преобразуйте этот файл XML для редактирования if Request.Form("btn_sub")="" then loadFile server.MapPath("tool.xml"),server.MapPath("tool.xsl") else updateFile server.MapPath("tool.xml") end if %>
Совет:Если вы не знаете, как писать ASP, пожалуйста, изучите наш:Учебник по ASP}
Комментарий:Мы занимаемся преобразованием и обновлением XML-файлов, расположенных на сервере. Это кроссплатформенное решение. Клиент может получить только HTML, возвращаемый сервером, а HTML может выполняться в любом браузере.
- Предыдущая страница XSLT на сервере
- Следующая страница Примеры XSLT