تحرير XML
- الصفحة السابقة XSLT على الجهاز الخادم
- الصفحة التالية مثال على XSLT
يمكن تعديل البيانات المخزنة في ملف 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>
ثم، انظر إلى النمذجة التالية ("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 سيعيد التدوير عبر العناصر في ملف 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>
ملف 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) ضبط variable rootEl على العنصر الجذر Set rootEl = xmlDoc.documentElement استعراض مجموعة النموذج for i = 1 To Request.Form.Count إزالة عناصر الأزرار من النموذج if instr(1,Request.Form.Key(i),"btn_")=0 then يمكن استخدام طريقة selectSingleNode للبحث عن وحدة معينة في ملف XML يحتوي على استعلام معين. سواء كانت هذه الاستعلام يطلب عنصر value، الذي هو عنصر فرع لـ element field، وذلك عنصر field يمتلك خاصية id يمكن تطابق مع الحقل الحالي في مجموعة النموذج. إذا كانت موجودة تطابق، يتم تعيين الخاصية 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 الموجودة على الخادم. هذا هو حل متعدد المنصات. يمكن للعميل الحصول فقط على HTML التي تعود من الخادم - والذي يمكن تشغيله على أي متصفح.
- الصفحة السابقة XSLT على الجهاز الخادم
- الصفحة التالية مثال على XSLT