تحرير 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)
ضبط 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 التي تعود من الخادم - والذي يمكن تشغيله على أي متصفح.