XSLT - XML Editeren

Data stored in XML files 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 an XML document into an HTML form. The values of XML elements will be written to HTML input fields in the form. This form is editable. After editing, the data will be submitted back to the server, and the XML file will be updated (this part is done by ASP).

XML-bestanden en XSL-bestanden

Eerst, bekijk het te gebruiken XML-document ("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>

Bekijk de XML-bestand.

Vervolgens, bekijk de onderstaande stylesheet ("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>Tool Informatie (bewerken):</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="Indienen" />
<input type="reset" id="btn_res" name="btn_res" value="Herstel" />
</form>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

Bekijk het XSL-bestand.

Deze XSL-bestand loopt door de elementen in de XML-bestanden en maakt voor elk XML "field"-element een invoerveld aan. De waarde van de id-eigenschap van het field-element wordt toegevoegd aan de id- en name-eigenschappen van elk HTML-invoerveld. De waarde van het "value"-element wordt toegevoegd aan de "value"-eigenschap van elk HTML-invoerveld. Het resultaat is een bewerkbare HTML-formulier die de waarden uit de XML-bestanden bevat.

Daarnaast hebben we nog een tweede sjabloon: "tool_updated.xsl". Dit XSL-bestand wordt gebruikt om de geüpdateerde XML-gegevens weer te geven. Deze sjabloon geeft geen bewerkbare HTML-formulieren weer, maar een statische HTML-tabel:

<?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>Geüpdateerde Tool Informatie:</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>

Bekijk het XSL-bestand.

ASP-bestand

In het "tool.xsl" bestand is de waarde van de action-eigenschap van het HTML-formulier "edittool.asp".

"edittool.asp" pagina bevat twee functies: loadFile() het laden en omzetten van XML-bestanden, updateFile() functie update XML-bestanden:

<%
function loadFile(xmlfile,xslfile)
Dim xmlDoc,xslDoc
Laad het XML-bestand
set xmlDoc = Server.CreateObject("Microsoft.XMLDOM")
xmlDoc.async = false
xmlDoc.load(xmlfile)
het laden van de XSL-bestand
set xslDoc = Server.CreateObject("Microsoft.XMLDOM")
xslDoc.async = false
xslDoc.load(xslfile)
het omzetten van het bestand
Response.Write(xmlDoc.transformNode(xslDoc))
end function
function updateFile(xmlfile)
Dim xmlDoc,rootEl,f
Dim i
Laad het XML-bestand
set xmlDoc = Server.CreateObject("Microsoft.XMLDOM")
xmlDoc.async = false
xmlDoc.load(xmlfile)
Stel de variabele rootEl in op de root-element
Set rootEl = xmlDoc.documentElement
Bewerk de form-set
for i = 1 To Request.Form.Count
   Verwijder de knop-elementen in het formulier
   if instr(1,Request.Form.Key(i),"btn_")=0 then
   De selectSingleNode-methode kan een enkele node in een XML-bestand met een specifieke query verkennen.
   Deze query zal de value-element vragen, die een onder-element van de field-element is.
   Deze field-element heeft een id-eigenschap die kan worden overeengekomen met de huidige key-waarde in het formulier.
   Als er een overeenkomst bestaat, stel dan de text-eigenschap in op de waarde van het huidige veld in het formulier.
   set f = rootEl.selectSingleNode("field[@id='" & _
   Request.Form.Key(i) & "/value")
   f.Text = Request.Form(i)
   end if
next
Sla het gewijzigde XML-bestand op
xmlDoc.save xmlfile
Vrijwaar alle objectverwijzingen
set xmlDoc=nothing
set rootEl=nothing
set f=nothing
Laad het gewijzigde XML-bestand met een stijltafel, zodat de client de gewijzigde informatie kan zien.
loadFile xmlfile,server.MapPath("tool_updated.xsl")
end function
Als het formulier is ingediend, updateer dan het XML-bestand en toon het resultaat, indien niet, converteer dit XML-bestand voor het bewerken.
if Request.Form("btn_sub")="" then
loadFile server.MapPath("tool.xml"),server.MapPath("tool.xsl")
else
updateFile server.MapPath("tool.xml")
end if
%>

Tip:Als je niet weet hoe je ASP kunt schrijven, leer dan onzeASP Handleiding》。

Opmerking:We zijn bezig met het converteren en bijwerken van XML-bestanden op de server. Dit is een cross-platform oplossing. De client kan alleen HTML ontvangen van de server, dat op elke browser kan draaien.