Online-Bearbeitung von XML-Dokumenten mit XSL und ASP
Autor:Eve Cole
Aktualisierungszeit:2009-06-23 16:38:26
In diesem Artikel wird die Methode der Online-Bearbeitung von XML-Dokumentdaten anhand eines detaillierten Beispiels erläutert. Da die XML-Unterstützung von Netscape relativ schwach ist, muss die Datenverarbeitung serverseitig erfolgen, um einen plattformübergreifenden Datenaustausch zu erreichen. Um ein XML-Dokument zu bearbeiten, müssen Sie zunächst die Daten extrahieren und den Besuchern anzeigen. XSL bietet eine gute Lösung für die Anzeige von XML-Dateien. Im folgenden Beispiel wird ein XSL-Stylesheet verwendet, um ein XML-Dokument anzuzeigen, das Benutzer bearbeiten können, und dann werden die bearbeiteten Daten an den Server gesendet, wo die Daten serverseitig aktualisiert werden. Zur Erledigung unserer Aufgaben kommt hier ASP (Active Server Pages) zum Einsatz.
Laden Sie zunächst das XML-Dokument, das wir bearbeiten möchten. Mithilfe des Document Object Model (Microsoft XMLDOM Object) und XSL kann das XML-Dokument auf der Serverseite in HTML-Dateiinhalte konvertiert werden, die auf der Clientseite angezeigt werden können. Schauen wir uns zunächst an, wie die von uns verwendeten XML- und XSL-Dateien aussehen.
XML-Datei: userdata.xml
<?xml version="1.0"kodierung="gb2312"?>
<Benutzerprofil>
<field id="Name" taborder="1">
<field_value>Mencius</field_value>
</field>
<field id="gender" taborder="2">
<field_value>Männlich</field_value>
</field>
<field id="Name der Organisation" taborder="3">
<field_value>China Network Technology Development Corporation, Zweigstelle Peking</field_value>
</field>
<field id="Detaillierte Adresse" taborder="4">
<field_value>102. Etage, Kerry Center, Peking</field_value>
</field>
<field id="Telefon" taborder="5">
<field_value>1391139136*</field_value>
</field>
<field id="email" taborder="6">
<field_value>[email protected]</field_value>
</field>
</Benutzerprofil>
„www.knowsky.com
XSL-Datei: userdata.xsl
<?xml version="1.0"kodierung="gb2312" ?>
<xsl:stylesheet xmlns:xsl=" http://www.w3.org/TR/WD-xsl ">
<xsl:template match="/">
<html>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<Körper>
<form method="post" action="Edituserdata.asp">
<h1>Benutzerprofilbearbeitung:</h1>
<table border="1" cellpadding="2">
<xsl:for-each select="Benutzerprofil/Feld">
<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="field_value" /> </xsl:attribute></input >
</td>
</tr>
</xsl:for-each>
</table>
<br />
<input type="submit" id="btnSubmit" name="btnSubmit" value="Vollständige Bearbeitung" />
</form>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Die XSL-Datei verwendet das XSL:for-each-Element, um die gesamte XML-Datei zu durchlaufen. Das „id“-Attribut jedes „field“-Elements in der XML-Datei entspricht der „id“ und dem „name“ des Texteingabefelds HTML-Formular. Auf diese Weise zeigt das Texteingabefeld des HTML-Formulars den Elementwert der XML-Datei an. Diese Datei ist für die serverseitige Konvertierung von XML-Dokumenten verantwortlich, damit diese auf verschiedenen Browsern angezeigt werden können.
Das Folgende ist das Schlüsselprogramm, das die Funktion zum Öffnen und Aktualisieren von XML-Dokumenten implementiert und basierend darauf, ob das Formular gesendet wird oder nicht, entscheidet, ob eine Aktualisierung durchgeführt wird. Es enthält zwei Funktionen: „loadXMLFile“ ist für das Laden und Konvertieren der anzuzeigenden XML-Datei verantwortlich; die Funktion „updateXML“ ist für die Aktualisierung der XML-Datei verantwortlich.
Das Programm Edituserdata.asp lautet wie folgt:
<%
''------------------------------------------------ ----------
''Definieren Sie die Funktion loadXMLFile(), die zwei Parameter empfängt:
''strXMLFile – der Pfad und Dateiname der XML-Datei
''strXSLFilee – der Pfad und Dateiname der XSL-Datei
''www.knowsky.com
''------------------------------------------------ ----------
Funktion loadXMLFile(strXMLFile, strXSLFile)
''Lokale Variablen deklarieren
Dimmen Sie objXML
Dim objXSL
''Instanziieren Sie ein XMLDOM-Objekt, um XML-Dateien zu laden.
set objXML = Server.CreateObject("Microsoft.XMLDOM")
''Deaktivieren Sie den asynchronen Dateilademodus.
objXML.async = false
''XML-Datei laden!
objXML.load(strXMLFile)
''Instanziieren Sie das XMLDOM-Objekt, um die XSL-Datei zu laden.
set objXSL = Server.CreateObject("Microsoft.XMLDOM")
''Deaktivieren Sie den asynchronen Dateilademodus.
objXSL.async = false
''XSL-Datei laden!
objXSL.load(strXSLFile)
''Verwenden Sie die transformNode-Methode von XMLDOM, um das XSL-Stylesheet auf das XML-Dokument anzuwenden und es dann an den Client auszugeben.
Response.Write(objXML.transformNode(objXSL))
Funktion beenden
''------------------------------------------------ -------------------
''Die Funktion updateXML() erhält einen Parameter: strXMLFile – den Pfad und Dateinamen der XML-Datei.
''------------------------------------------------ -------------------
Funktion updateXML(strXMLFile)
''Lokale Variablen deklarieren.
Dim objDom
Dimmen Sie objRoot
Dim objField
Dimmen Sie x
''Instanziieren Sie das XMLDOM-Objekt.
set objDOM = Server.CreateObject("Microsoft.XMLDOM")
''Deaktivieren Sie den asynchronen Dateilademodus.
objDOM.async = false
''Laden Sie die XML-Datei.
objDOM.load strXMLFile
''Legen Sie das Wurzelelement fest.
Setzen Sie objRoot = objDom.documentElement
''Durchlaufen Sie die FORM-Sammlung und schreiben Sie die übermittelten Daten in die XML-Datei.
Für x = 1 zu Request.Form.Count
''Überprüfen Sie, ob die übermittelten Daten eine Schaltfläche enthalten. Wenn ja, ignorieren Sie diese Daten.
Wenn instr(1,Request.Form.Key(x),"btn") = 0 Dann
„Erstellen Sie entsprechend dem XSL-Abfragemodus die Variable objField und ordnen Sie die Elemente des Formulars den entsprechenden Elementen [field_value] im XML-Dokument zu.
Setze objField = objRoot.selectSingleNode("field[@id=''" & Request.Form.Key(x) & "'']/field_value")
'' Entspricht den vom Formular übermittelten Daten den Knotenwerten im XML-Dokument.
objField.Text = Request.Form(x)
Ende wenn
Nächste
''Speichern Sie die bearbeitete XML-Datei.
objDom.save strXMLFile
''Alle Verweise auf das Objekt freigeben.
Setze objDom = Nothing
Setze objRoot = Nothing
Setze objField = Nothing
„Rufen Sie die Funktion „loadXMLFile“ auf, um dem Client die neu bearbeitete XML-Datei mithilfe des Stylesheets „updateuserdata.xsl“ anzuzeigen.
LoadXMLFile strXMLFile,server.MapPath("updateduserdata.xsl")
Funktion beenden
„Überprüfen Sie, ob das Formular erfolgreich gesendet wurde. Wenn es gesendet wurde, aktualisieren Sie die XML-Datei. Andernfalls wechseln Sie in den Bearbeitungsstatus.
Wenn Request.Form("btnSubmit") = "" Dann
LoadXMLFile server.MapPath("userdata.xml"),server.MapPath("userdata.xsl")
Anders
updateXML server.MapPath("userdata.xml")
Ende wenn
%>
Wenn das Formular erfolgreich übermittelt wurde, verwenden wir „updateuserdata.xsl“, um die gerade bearbeiteten Daten anzuzeigen.
Die Datei „updateuserdata.xsl“ lautet wie folgt:
<?xml version="1.0"kodierung="gb2312" ?>
<xsl:stylesheet xmlns:xsl=" http://www.w3.org/TR/WD-xsl ">
<xsl:template match="/">
<html>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<Körper>
<h1>Die aktualisierten Benutzerinformationen lauten wie folgt:</h1>
<table border="1" cellpadding="2">
<xsl:for-each select="Benutzerprofil/Feld">
<tr>
<td>
<xsl:value-of select="@id" />
</td>
<td>
<xsl:value-of select="field_value" />
</td>
</tr>
</xsl:for-each>
</table>
<Formular>
<input type="button" value="Return" onclick="history.go(-1)" />
</form>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Das Obige ist nur ein einfaches Beispiel für eine plattformübergreifende XML-Anwendung. Basierend auf spezifischen Anforderungen können wir leistungsfähigere Programme schreiben, um unsere komplexeren Arbeiten abzuschließen. Alle Programme wurden debuggt und in der Umgebung WIN98SE+PWS+IE5.5+Netscape 4.75+Netscape 6+MSXML3.DLL übergeben.