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