XSLT - Редактирование XML
- Предыдущая страница 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, который можно сопоставить текущему значению ключа в наборе форм Если существует соответствие, то устанавливается атрибут 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, пожалуйста, изучите наш «Тutorиал по ASP》。
Комментарий:Мы выполняем преобразование и обновление XML-файлов, расположенных на сервере. Это кроссплатформенное решение. Клиент может получить только HTML, возвращаемый сервером, а HTML может выполняться в любом браузере.
- Предыдущая страница XSLT на сервере
- Следующая страница Редактор XSLT