XSLT - Επεξεργασία XML

Τα δεδομένα που αποθηκεύονται στα αρχεία XML μπορούν να επεξεργαστούν μέσω του διαδικτυακού προγράμματος περιήγησης.

Ανοίξτε, επεξεργαστείτε και αποθηκεύστε τα αρχεία XML

Τώρα, θα σας δείξουμε πώς να ανοίξετε, να επεξεργαστείτε και να αποθηκεύσετε τα αρχεία XML που αποθηκεύονται στον διακομιστή.

Θα χρησιμοποιήσουμε το XSL για να μετατρέψουμε το αρχείο XML σε μια φόρμα HTML. Οι τιμές των στοιχείων XML θα γραφτούν στις περιοχές εισαγωγής HTML της φόρμας. Η φόρμα αυτή είναι επεξεργαστέα. Μετά την ολοκλήρωση της επεξεργασίας, τα δεδομένα θα υποβληθούν πίσω στο διακομιστή, το αρχείο XML θα ενημερωθεί (αυτό το μέρος το επιτυγχάνει το ASP).

Αρχεία XML και XSL

Πρώτα από όλα, δείτε το XML αρχείο που θα χρησιμοποιηθεί ("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>

Ελέγξτε το αρχείο 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.asp">
<h2>Ειδήσεις Εργαλείων (επεξεργασία):</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.

Το παραπάνω αρχείο XSL θα περπατήσει σε κύκλο τα στοιχεία του αρχείου XML και θα δημιουργήσει ένα πεδίο εισαγωγής για κάθε στοιχείο "field" XML. Η τιμή της ιδιότητας id του στοιχείου field θα προστεθεί στις ιδιότητες id και name κάθε HTML πεδίου εισαγωγής. Η τιμή του στοιχείου "value" θα προστεθεί στην ιδιότητα "value" κάθε HTML πεδίου εισαγωγής. Το αποτέλεσμα είναι να μπορούμε να έχουμε μια επεξεργασμένη HTML φόρμα που περιέχει τις τιμές του αρχείου XML.

Στη συνέχεια, έχουμε και δεύτερη στυλική τάξη: "tool_updated.xsl". Αυτό το αρχείο XSL θα χρησιμοποιηθεί για την εμφάνιση των ενημερωμένων δεδομένων XML. Αυτή η στυλική τάξη δεν θα εκτυπώσει επεξεργασμένα HTML φόρμα, αλλά μια στατική HTML τάβλη.

<?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>Ενημερωμένες πληροφορίες εργαλείου:</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.

Αρχείο ASP

Στο αρχείο "tool.xsl", η τιμή της ιδιότητας action του HTML φόρμας είναι "edittool.asp".

Η σελίδα "edittool.asp" περιέχει δύο συναρτήσεις: loadFile() για τη φόρτωση και μετατροπή του αρχείου XML, και updateFile() για την ενημέρωση του αρχείου XML:

<%
function loadFile(xmlfile,xslfile)
Dim xmlDoc,xslDoc
φορτώνει το αρχείο XML
set xmlDoc = Server.CreateObject("Microsoft.XMLDOM")
xmlDoc.async = false
xmlDoc.load(xmlfile)
φορτώνει το αρχείο XSL
set xslDoc = Server.CreateObject("Microsoft.XMLDOM")
xslDoc.async = false
xslDoc.load(xslfile)
μετατρέπει το αρχείο
Response.Write(xmlDoc.transformNode(xslDoc))
end function
function updateFile(xmlfile)
Dim xmlDoc,rootEl,f
Dim i
φορτώνει το αρχείο XML
set xmlDoc = Server.CreateObject("Microsoft.XMLDOM")
xmlDoc.async = false
xmlDoc.load(xmlfile)
ορίζει το ρίζα rootEl ως το στοιχείο ρίζας
Set rootEl = xmlDoc.documentElement
κύκλος πλοήγησης στη συλλογή form
for i = 1 To Request.Form.Count
   αφαιρεί τα στοιχεία κουμπιών από τη φόρμα
   if instr(1,Request.Form.Key(i),"btn_")=0 then
   η μέθοδος selectSingleNode μπορεί να αναζητήσει ένα μοναδικό κόμβο στο αρχείο XML που ταιριάζει σε μια ερώτηση
   αυτή η ερώτηση ζητά το στοιχείο value, το οποίο είναι υποστοιχείο του στοιχείου field
   αυτό το στοιχείο field έχει την ιδιότητα id που μπορεί να ταιριάζει στην τρέχουσα τιμή key της φόρμας
   αν υπάρχει συμφωνία, τότε ορίζεται η ιδιότητα text ως η τιμή του τρέχοντος πεδίου της φόρμας
   set f = rootEl.selectSingleNode("field[@id='" & _
   Request.Form.Key(i) & "]/value")
   f.Text = Request.Form(i)
   end if
next
αποθηκεύει το τροποποιημένο αρχείο XML
xmlDoc.save xmlfile
απελευθερώνει όλες τις αναφορές αντικειμένων
set xmlDoc=nothing
set rootEl=nothing
set f=nothing
με τη φόρτωση ενός φυλλαδίου στυλ φορτώνεται το τροποποιημένο αρχείο XML, ώστε ο πελάτης να δει τις πληροφορίες που έχουν επεξεργαστεί
loadFile xmlfile,server.MapPath("tool_updated.xsl")
end function
Αν το μορφότυπο έχει υποβληθεί, τότε ενημερώστε το αρχείο XML και εμφανίστε τα αποτελέσματα, αν δεν έχει υποβληθεί, τότε μετατρέψτε το αρχείο XML για επεξεργασία
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》。

Σημείωση:Είμαστε σε διαδικασία μετατροπής και ενημέρωσης των αρχείων XML που βρίσκονται στο server. Αυτό είναι μια λύση διασταυρούμενης πλατφόρμας. Ο πελάτης μπορεί να λαμβάνει μόνο το HTML που επιστρέφεται από τον server - και το HTML μπορεί να εκτελεστεί σε οποιοδήποτε browser.