XSLT - Bearbeiten von XML

Daten, die in XML-Dateien gespeichert sind, können mit einem Internetbrowser bearbeitet werden.

Öffnen, bearbeiten und speichern von XML

Jetzt werden wir Ihnen zeigen, wie Sie XML-Dateien, die auf dem Server gespeichert sind, öffnen, bearbeiten und speichern.

Wir werden XSL verwenden, um XML-Dokumente in HTML-Formulare zu konvertieren. Die Werte der XML-Elemente werden in HTML-Eingabefelder des Formulars geschrieben. Dieses Formular ist editierbar. Nachdem es bearbeitet wurde, werden die Daten an den Server gesendet und das XML-Dokument wird aktualisiert (dies wird von ASP erledigt).

XML-Dokument und XSL-Dokument

Zunächst, schauen Sie sich das zu verwendende XML-Dokument ("tool.xml") an:

<?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-Dokument anzeigen.

Nun, schauen Sie sich die folgende Stilvorlage ("tool.xsl") an:

<?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>Werkzeuginformationen (bearbeiten):</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-Datei anzeigen.

Dieser XSL-Datei wird der Inhalt des XML-Dokuments durchlaufen und für jeden "field"-Element im XML-Dokument einen Eingabefeld erstellen. Der Wert der "id"-Attribut des "field"-Elements wird zu den "id"- und "name"-Attributen jedes HTML-Eingabefeldes hinzugefügt. Der Wert des "value"-Elements wird zu den "value"-Attributen jedes HTML-Eingabefeldes hinzugefügt. Als Ergebnis kann eine editierbare HTML-Formular erhalten werden, die die Werte aus dem XML-Dokument enthält.

Dann haben wir noch eine zweite Stilvorlage: "tool_updated.xsl". Diese XSL-Datei wird verwendet, um aktualisierte XML-Daten anzuzeigen. Diese Stilvorlage gibt kein editierbares HTML-Formular aus, sondern eine statische HTML-Tabelle:

<?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>Aktualisierte Werkzeuginformationen:</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>

XSL-Datei anzeigen.

ASP-Datei

Im "tool.xsl"-Datei ist der Wert der action-Attribut des HTML-Formulars "edittool.asp".

"edittool.asp"-Seite enthält zwei Funktionen: loadFile() lädt und wandelt XML-Dateien um, updateFile() aktualisiert XML-Dateien:

<%
function loadFile(xmlfile, xslfile)
Dim xmlDoc, xslDoc
Das XML-Dokument wird geladen
set xmlDoc = Server.CreateObject("Microsoft.XMLDOM")
xmlDoc.async = false
xmlDoc.load(xmlfile)
Datei laden XSL
set xslDoc = Server.CreateObject("Microsoft.XMLDOM")
xslDoc.async = false
xslDoc.load(xslfile)
Datei umwandeln
Response.Write(xmlDoc.transformNode(xslDoc))
end function
function updateFile(xmlfile)
Dim xmlDoc,rootEl,f
Dim i
Das XML-Dokument wird geladen
set xmlDoc = Server.CreateObject("Microsoft.XMLDOM")
xmlDoc.async = false
xmlDoc.load(xmlfile)
Der Variable rootEl wird das Wurzelelement zugewiesen
Set rootEl = xmlDoc.documentElement
Das Formular-Set wird durchlaufen
for i = 1 To Request.Form.Count
   Elemente der Schaltfläche im Formular werden entfernt
   if instr(1,Request.Form.Key(i),"btn_")=0 then
   Die selectSingleNode-Methode kann nach einem bestimmten Abfragekriterium im XML-Dokument nach einem bestimmten Knoten suchen.
   Diese Abfrage fordert das value-Element an, das ein Unterlement des field-Elements ist,
   Dieser field-Element hat eine id-Attribut, das mit dem aktuellen key-Wert im Formular übereinstimmt.
   Wenn ein Treffer vorhanden ist, wird das text-Attribut auf den Wert des aktuellen Feldes im Formular gesetzt.
   set f = rootEl.selectSingleNode("field[@id='" & _
   Request.Form.Key(i) & "/value")
   f.Text = Request.Form(i)
   end if
next
Die geänderte XML-Datei wird gespeichert
xmlDoc.save xmlfile
Alle Objektverweise werden freigegeben
set xmlDoc=nothing
set rootEl=nothing
set f=nothing
Durch eine Stilvorlage wird die geänderte XML-Datei geladen, sodass der Client die bearbeiteten Informationen sehen kann
loadFile xmlfile,server.MapPath("tool_updated.xsl")
end function
Wenn das Formular bereits eingereicht wurde, wird die XML-Datei aktualisiert und das Ergebnis angezeigt, wenn nicht, wird diese XML-Datei in eine für die Bearbeitung konvertierte Form umgewandelt
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 教程》。

Note:We are converting and updating the XML files located on the server. This is a cross-platform solution. The client can only obtain HTML returned from the server - while HTML can run on any browser.