تحرير مستندات XML عبر الإنترنت باستخدام XSL وASP
الكاتب:Eve Cole
وقت التحديث:2009-06-23 16:38:26
تشرح هذه المقالة طريقة التحرير عبر الإنترنت لبيانات مستند XML من خلال مثال تفصيلي. نظرًا لأن دعم Netscape لـ XML ضعيف نسبيًا، ولتحقيق تبادل البيانات عبر الأنظمة الأساسية، يجب إجراء معالجة البيانات على جانب الخادم. لتحرير مستند XML، أول شيء يجب فعله هو كيفية استخراج البيانات وعرضها للزائرين. يوفر لنا XSL حلاً جيدًا لعرض ملفات XML. يستخدم المثال التالي ورقة أنماط XSL لعرض مستند XML للمستخدمين لتحريره، ثم إرسال البيانات المحررة إلى الخادم، حيث يتم تحديث البيانات على جانب الخادم. يتم استخدام ASP (صفحات الخادم النشطة) هنا لإكمال مهامنا.
أولاً، قم بتحميل مستند XML الذي نريد تحريره باستخدام نموذج كائن مستند Microsoft (كائن Microsoft XMLDOM) وXSL، يمكن تحويل مستند XML على جانب الخادم إلى محتوى ملف HTML يمكن عرضه على جانب العميل. دعونا أولاً نلقي نظرة على الشكل الذي تبدو عليه ملفات XML وXSL التي نستخدمها.
ملف XML: userdata.xml
<?xml version="1.0" encoding="gb2312"?>
<ملف تعريف المستخدم>
<معرف الحقل = "الاسم" taborder = "1">
<field_value>مينسيوس</field_value>
</الحقل>
<field id = "gender" taborder = "2">
<field_value>ذكر</field_value>
</الحقل>
<field id="اسم المؤسسة" taborder="3">
<field_value>فرع شركة تطوير تكنولوجيا الشبكات الصينية في بكين</field_value>
</الحقل>
<معرف الحقل = "العنوان التفصيلي" taborder = "4">
<field_value>الطابق 102، مركز كيري، بكين</field_value>
</الحقل>
<field id="Telephone" taborder="5">
<field_value>1391139136*</field_value>
</الحقل>
<field id="email" taborder="6">
<field_value>[email protected]</field_value>
</الحقل>
</ملف تعريف المستخدم>
"www.knowsky.com."
ملف XSL: userdata.xsl
<?xml version="1.0" encoding="gb2312" ?>
<xsl:stylesheet xmlns:xsl=" http://www.w3.org/TR/WD-xsl ">
<xsl:تطابق القالب="/">
<أتش تي أم أل>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<الجسم>
<طريقة النموذج = "post" action = "Edituserdata.asp">
<h1>تحرير ملف تعريف المستخدم:</h1>
<حدود الجدول = "1" خلية الحشو = "2">
<xsl:for-each حدد = "ملف تعريف المستخدم/الحقل">
<تر>
<TD>
<xsl:قيمة التحديد='@id'/>
</TD>
<TD>
<نوع الإدخال = "نص"> <xsl:attribute name = "id"> <xsl:value-of تحديد = "@id" /> </xsl:attribute> <xsl:attribute name = "name"><xsl :قيمة التحديد = "@id" /></xsl:attribute> <xsl:attribute name = "value"> <xsl:value-of تحديد = "field_value" /> </xsl:attribute></input >
</TD>
</tr>
</xsl:لكل>
</الجدول>
<br />
<input type = "submit" id = "btnSubmit" name = "btnSubmit" value = "إكمال التحرير" />
</النموذج>
</الجسم>
</html>
</xsl:قالب>
</xsl:ورقة الأنماط>
يستخدم ملف XSL عنصر XSL:for-each لاجتياز ملف XML بالكامل. تتوافق سمة "id" لكل عنصر "حقل" في ملف XML مع "id" و"name" لمربع إدخال النص الخاص بملف XML. نموذج HTML. بهذه الطريقة، يعرض مربع إدخال النص لنموذج HTML قيمة العنصر لملف XML. هذا الملف مسؤول عن التحويل من جانب الخادم لمستندات XML بحيث يمكن عرضها على متصفحات مختلفة.
فيما يلي البرنامج الرئيسي الذي ينفذ وظيفة فتح وتحديث مستندات XML، ويقرر ما إذا كان سيتم التحديث بناءً على ما إذا كان النموذج قد تم إرساله أم لا. يحتوي على وظيفتين، LoadXMLFile هي المسؤولة عن تحميل وتحويل ملف XML المراد عرضه؛ وظيفة updateXML هي المسؤولة عن تحديث ملف XML.
برنامج Edituserdata.asp هو كما يلي:
<%
''------------------------------------------------ ----------
''حدد الدالة LoadXMLFile()، التي تتلقى معلمتين:
''strXMLFile - المسار واسم الملف لملف XML
''strXSLFilee - المسار واسم الملف لملف XSL
''www.knowsky.com
''------------------------------------------------ ----------
وظيفة تحميلXMLFile (strXMLFile، strXSLFile)
'' قم بتعريف المتغيرات المحلية
خافت objXML
خافت objXSL
'' إنشاء كائن XMLDOM لتحميل ملفات XML.
تعيين objXML = Server.CreateObject("Microsoft.XMLDOM")
'' قم بإيقاف تشغيل وضع تحميل الملفات غير المتزامن.
objXML.async = خطأ
''تحميل ملف XML!
objXML.load(strXMLFile)
'' إنشاء كائن XMLDOM لتحميل ملف XSL.
تعيين objXSL = Server.CreateObject("Microsoft.XMLDOM")
'' قم بإيقاف تشغيل وضع تحميل الملفات غير المتزامن.
objXSL.async = خطأ
''تحميل ملف XSL!
objXSL.load(strXSLFile)
''استخدم طريقة TransformNode الخاصة بـ XMLDOM لتطبيق ورقة أنماط XSL على مستند XML ثم إخراجها إلى العميل.
الاستجابة.الكتابة (objXML.transformNode (objXSL))
وظيفة النهاية
''------------------------------------------------ ------------------
''تتلقى الوظيفة updateXML() معلمة واحدة: strXMLFile - المسار واسم الملف لملف XML.
''------------------------------------------------ ------------------
تحديث الوظيفةXML(strXMLFile)
'' قم بتعريف المتغيرات المحلية.
خافت objDom
خافت objRoot
خافت objField
خافت س
'' إنشاء مثيل لكائن XMLDOM.
تعيين objDOM = Server.CreateObject("Microsoft.XMLDOM")
'' قم بإيقاف تشغيل وضع تحميل الملفات غير المتزامن.
objDOM.async = خطأ
'' قم بتحميل ملف XML.
objDOM.load strXMLFile
''تعيين العنصر الجذر.
تعيين objRoot = objDom.documentElement
'' اجتياز مجموعة النموذج وكتابة البيانات المرسلة إلى ملف XML.
بالنسبة لـ x = 1 إلى Request.Form.Count
''تحقق مما إذا كانت البيانات المقدمة تحتوي على زر. إذا كان الأمر كذلك، تجاهل هذه البيانات.
إذا كان instr(1,Request.Form.Key(x),"btn") = 0 إذن
'' وفقًا لوضع استعلام XSL، قم بإنشاء متغير objField وقم بتعيين عناصر النموذج إلى العناصر المقابلة [field_value] في مستند XML.
تعيين objField = objRoot.selectSingleNode("field[@id=''" & Request.Form.Key(x) & "'']/field_value")
'' يتوافق مع البيانات المقدمة من النموذج مع قيم العقدة في مستند XML.
objField.Text = Request.Form(x)
نهاية إذا
التالي
''احفظ ملف XML الذي تم تحريره.
objDom.save strXMLFile
'' حرر كافة المراجع إلى الكائن.
تعيين objDom = لا شيء
تعيين objRoot = لا شيء
تعيين objField = لا شيء
''استدعاء وظيفةloadXMLFile لعرض ملف XML الذي تم تحريره حديثًا للعميل باستخدام ورقة الأنماط المحدثةuserdata.xsl.
تحميلXMLFile strXMLFile,server.MapPath("updateduserdata.xsl")
وظيفة النهاية
''تحقق من إرسال النموذج بنجاح، إذا تم إرساله، قم بتحديث ملف XML؛ وإلا انتقل إلى حالة التحرير.
إذا Request.Form("btnSubmit") = "" إذن
LoadXMLFile server.MapPath("userdata.xml"),server.MapPath("userdata.xsl")
آخر
updateXML server.MapPath("userdata.xml")
نهاية إذا
%>
عندما يتم إرسال النموذج بنجاح، نستخدم Updateuserdata.xsl لعرض البيانات التي قمنا بتحريرها للتو.
Updateuserdata.xsl هو كما يلي:
<?xml version="1.0" encoding="gb2312" ?>
<xsl:stylesheet xmlns:xsl=" http://www.w3.org/TR/WD-xsl ">
<xsl:تطابق القالب="/">
<أتش تي أم أل>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<الجسم>
<h1>معلومات المستخدم المحدثة هي كما يلي:</h1>
<حدود الجدول = "1" خلية الحشو = "2">
<xsl:for-each حدد = "ملف تعريف المستخدم/الحقل">
<تر>
<TD>
<xsl:قيمة التحديد = "@id" />
</TD>
<TD>
<xsl:قيمة تحديد = "field_value" />
</TD>
</tr>
</xsl:لكل>
</الجدول>
<النموذج>
<input type = "button" value = "Return" onclick = "history.go (-1)" />
</النموذج>
</الجسم>
</html>
</xsl:قالب>
</xsl:ورقة الأنماط>
ما ورد أعلاه هو مجرد مثال بسيط لتطبيق XML عبر الأنظمة الأساسية، بناءً على الاحتياجات المحددة، يمكننا كتابة برامج أكثر قوة لإكمال عملنا الأكثر تعقيدًا. تم تصحيح كافة البرامج وتمريرها في بيئة WIN98SE+PWS+IE5.5+Netscape 4.75+Netscape 6+MSXML3.DLL.