XSLT tutoriallogin
XSLT tutorial
author:php.cn  update time:2022-04-20 15:02:22

XSLT Edit XML



#The data stored in the XML file can be edited through an Internet browser.


Open, edit and save XML

Now, we will show you how to open, edit and save XML files stored on the server.

We will use XSL to convert the XML document into an HTML form. The value of the XML element is written to the HTML input field in the HTML form. This HTML form is editable. After being edited, the data is submitted back to the server and the XML file is updated (this is done by ASP).


XML files and XSL files

First, look at the XML document ("tool.xml") that will be used:

<? 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>

查看 XML 文件。

接着,请看下面的样式表("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.html">
<h2>Tool Information (edit):</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>

View XSL file.

The above XSL file will loop through the elements in the XML file and create an input field for each XML "field" element. The value of the "id" attribute of the XML "field" element is added to the "id" and "name" attributes of each HTML input field. The value of each XML "value" element is added to the "value" attribute of each HTML input field. The result is an editable HTML form that contains the values ​​from the XML file.

Then, we have a second style sheet: "tool_updated.xsl". This XSL file will be used to display the updated XML data. This stylesheet will not output an editable HTML form, but a static HTML form:

<?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>Updated Tool Information:</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>

View XSL file.


ASP file

In the above "tool.xsl" file, the value of the action attribute of the HTML form is "edittool.asp".

The "edittool.asp" page contains two functions: the loadFile() function loads and converts the XML file, and the updateFile() function updates the XML file:

<%
function loadFile(xmlfile,xslfile)
Dim xmlDoc,xslDoc
'Load XML file
set xmlDoc = Server.CreateObject("Microsoft.XMLDOM")
xmlDoc.async = false
xmlDoc .load(xmlfile)
'Load XSL file
set xslDoc = Server.CreateObject("Microsoft.XMLDOM")
xslDoc.async = false
xslDoc.load(xslfile)
'Transform file
Response.Write(xmlDoc.transformNode(xslDoc))
end function

function updateFile(xmlfile)
Dim xmlDoc,rootEl,f
Dim i
'Load XML file
set xmlDoc = Server.CreateObject("Microsoft.XMLDOM")
xmlDoc.async = false
xmlDoc.load(xmlfile)

'Set the rootEl variable equal to the root element
Set rootEl = xmlDoc.documentElement

'Loop through the form collection
for i = 1 To Request.Form.Count
'Eliminate button elements in the form
if instr( 1,Request.Form.Key(i),"btn_")=0 then
'The selectSingleNode method queries the XML file for a single node
'that matches a query. This query requests the value element that is
'the child of a field element that has an id attribute which matches
'the current key value in the Form Collection. When there is a match -
'set the text property equal to the value of the current field in the
'Form Collection.
set f = rootEl.selectSingleNode("field[@id='" & _
Request.Form.Key(i) & "']/value")
f.Text = Request.Form(i)
end if
next

'Save the modified XML file
xmlDoc.save xmlfile

'Release all object references
set xmlDoc=nothing
set rootEl=nothing
set f=nothing

'Load the modified XML file with a style sheet that
'allows the client to see the edited information
loadFile xmlfile,server.MapPath("tool_updated.xsl")
end function

'If the form has been submitted update the
'XML file and display result - if not ,
'transform the XML file for editing
if Request.Form("btn_sub")="" then
loadFile server.MapPath("tool.xml"),server.MapPath("tool.xsl ")
else
updateFile server.MapPath("tool.xml")
end if
%>

##Tips:If you If you don't know how to write ASP, please study our ASP tutorial.

Note: We are converting and updating the XML file located on the server. This is a cross-platform solution. The client only gets the HTML returned from the server - and HTML runs in any browser.