XSLT - XML bearbeiten
In einer XML-Datei gespeicherte Daten können über einen Internetbrowser bearbeitet werden.
XML öffnen, bearbeiten und speichern
Jetzt zeigen wir Ihnen, wie Sie auf dem Server gespeicherte XML-Dateien öffnen, bearbeiten und speichern.
Wir verwenden XSL, um das XML-Dokument in ein HTML-Formular umzuwandeln. Die Werte der XML-Elemente werden in HTML-Eingabefelder im HTML-Formular geschrieben. Dieses HTML-Formular ist bearbeitbar. Nach Abschluss der Bearbeitung werden die Daten zurück an den Server übermittelt und die XML-Datei wird aktualisiert (dieser Teil wird von ASP erledigt).
XML-Datei und XSL-Datei
Werfen Sie zunächst einen Blick auf das XML-Dokument, das verwendet wird ("tool.xml"):
<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>
。
Werfen Sie als Nächstes einen Blick auf das folgende Stylesheet ("tool.xsl"):
<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>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="Absenden" />
<input type="reset" id="btn_res" name="btn_res" value="Zurücksetzen" />
</form>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
。
Die obenstehende XSL-Datei durchläuft die Elemente in der XML-Datei und erstellt für jedes XML-"field"-Element ein Eingabefeld. Der Wert des "id"-Attributs des XML-"field"-Elements wird den "id"- und "name"-Attributen jedes HTML-Eingabefelds hinzugefügt. Der Wert jedes XML-"value"-Elements wird dem "value"-Attribut jedes HTML-Eingabefelds hinzugefügt. Das Ergebnis ist ein editierbares HTML-Formular, das die Werte aus der XML-Datei enthält.
Dann haben wir noch ein zweites Stylesheet: "tool_updated.xsl". Diese XSL-Datei wird verwendet, um die aktualisierten XML-Daten anzuzeigen. Dieses Stylesheet gibt kein editierbares HTML-Formular aus, sondern eine statische HTML-Tabelle:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<h2>Aktualisierte Tool-Informationen:</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-Datei
In der oben genannten Datei "tool.xsl" ist der Wert des action-Attributs des HTML-Formulars "edittool.asp".
Die Seite "edittool.asp" enthält zwei Funktionen: Die Funktion loadFile() lädt und transformiert die XML-Datei, und die Funktion updateFile() aktualisiert die XML-Datei:
function loadFile(xmlfile,xslfile)
Dim xmlDoc,xslDoc
'XML-Datei laden
set xmlDoc = Server.CreateObject("Microsoft.XMLDOM")
xmlDoc.async = false
xmlDoc.load(xmlfile)
'XSL-Datei laden
set xslDoc = Server.CreateObject("Microsoft.XMLDOM")
xslDoc.async = false
xslDoc.load(xslfile)
'Datei transformieren
Response.Write(xmlDoc.transformNode(xslDoc))
end function
function updateFile(xmlfile)
Dim xmlDoc,rootEl,f
Dim i
'XML-Datei laden
set xmlDoc = Server.CreateObject("Microsoft.XMLDOM")
xmlDoc.async = false
xmlDoc.load(xmlfile)
'Setze die Variable rootEl gleich dem Wurzelelement
Set rootEl = xmlDoc.documentElement
'Durchlaufe die Formularsammlung
for i = 1 To Request.Form.Count
'Entferne Button-Elemente im Formular
if instr(1,Request.Form.Key(i),"btn_")=0 then
'Die Methode selectSingleNode sucht in der XML-Datei nach einem einzelnen Knoten
'der einer Abfrage entspricht. Diese Abfrage fragt das value-Element ab, das
'das Kind eines field-Elements ist, das ein id-Attribut besitzt, das
'mit dem aktuellen Schlüsselwert in der Formularsammlung übereinstimmt. Wenn eine Übereinstimmung vorliegt -
'setzen Sie die Text-Eigenschaft auf den Wert des aktuellen Feldes in der
'Formularsammlung.
set f = rootEl.selectSingleNode("field[@id='" & _
Request.Form.Key(i) & "']/value")
f.Text = Request.Form(i)
end if
next
'Die geänderte XML-Datei speichern
xmlDoc.save xmlfile
'Alle Objektreferenzen freigeben
set xmlDoc=nothing
set rootEl=nothing
set f=nothing
'Laden Sie die geänderte XML-Datei mit einem Stylesheet, das
'ermöglicht es dem Client, die bearbeiteten Informationen zu sehen
loadFile xmlfile,server.MapPath("tool_updated.xsl")
end function
'Wenn das Formular übermittelt wurde, aktualisieren Sie die
'XML-Datei und zeigen das Ergebnis an - wenn nicht,
'transformieren Sie die XML-Datei zur Bearbeitung
if Request.Form("btn_sub")="" then
loadFile server.MapPath("tool.xml"),server.MapPath("tool.xsl")
else
updateFile server.MapPath("tool.xml")
end if
%>
Tipp:Wenn Sie nicht wissen, wie man ASP schreibt, lesen Sie bitte unserASP-Tutorial。
Hinweis:Wir transformieren und aktualisieren die auf dem Server befindliche XML-Datei. Dies ist eine plattformübergreifende Lösung. Der Client empfängt nur das vom Server zurückgegebene HTML - und HTML kann in jedem Browser ausgeführt werden.
Andere Erweiterungen