تشرح هذه المقالة طريقة التحرير عبر الإنترنت لبيانات مستند 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"?>
<!-- تم التعديل باستخدام XMLSPY v2004 rel.4 U ( http://www.xmlspy.com ) بواسطة Dicky (Apple'S Eden) -->
<معلومات المستخدم>
<معرف الحقل = "الاسم" TabOrder = "1">
<FieldValue>ديكي</FieldValue>
</الحقل>
<معرف الحقل = "الجنس" TabOrder = "2">
<FieldValue>ذكر</FieldValue>
</الحقل>
<معرف الحقل = "اسم الوحدة" TabOrder = "3">
<FieldValue>شركة شنغهاي أتيم</FieldValue>
</الحقل>
<معرف الحقل = "العنوان" TabOrder = "4">
<FieldValue>شانغهاي، طريق تشونغشان الغربي 1800#، الغرفة 26 أ</FieldValue>
</الحقل>
<معرف الحقل = "Tel" TabOrder = "5">
<FieldValue>13800138000</FieldValue>
</الحقل>
<معرف الحقل = "البريد الإلكتروني" TabOrder = "6">
<FieldValue>[email protected]</FieldValue>
</الحقل>
</UserInfo>
ملف XSL: UserData.xsl
<?xml version="1.0" encoding="gb2312"?>
<!-- تم التعديل باستخدام XMLSPY v2004 rel.4 U ( http://www.xmlspy.com ) بواسطة Dicky (Apple'S Eden) -->
<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 حدد="UserInfo/Field">
<تر>
<TD>
<xsl:قيمة التحديد='@ID'/>
</TD>
<TD>
<نوع الإدخال = "نص">
<xsl:اسم السمة = "ID"><xsl:قيمة التحديد = "@ID"/></xsl:attribute>
<xsl:attribute name="Name"><xsl:value-of تحديد="@ID"/></xsl:attribute>
<xsl:attribute name="Value"><xsl:value-of تحديد="FieldValue"/></xsl:attribute>
</الإدخال>
</TD>
</tr>
</xsl:لكل>
</الجدول>
<br/>
<نوع الإدخال = "إرسال" معرف = "btnSubmit" اسم = "btnSubmit" القيمة = "تحرير"/>
</النموذج>
</الجسم>
</html>
</xsl:قالب>
</xsl:stylesheet>
يستخدم ملف XSL عنصر XSL: for-each لاجتياز ملف XML بأكمله، السمة "id" لكل عنصر "field" في ملف XML و"id" و"id" الخاصين بملف XML مربع إدخال النص لاسم نموذج HTML" يتوافق مع. بهذه الطريقة، يعرض مربع إدخال النص لنموذج HTML قيمة العنصر لملف XML. هذا الملف مسؤول عن التحويل من جانب الخادم لمستندات XML بحيث يمكن عرضها على متصفحات مختلفة.
فيما يلي البرنامج الرئيسي الذي ينفذ وظيفة فتح وتحديث مستندات XML، ويقرر ما إذا كان سيتم التحديث بناءً على ما إذا كان النموذج قد تم إرساله أم لا. يحتوي على وظيفتين، LoadXMLFile هي المسؤولة عن تحميل وتحويل ملف XML المراد عرضه؛ وظيفة updateXML هي المسؤولة عن تحديث ملف XML.
برنامج EditUserData.asp كما يلي:
<%
'------------------------------------------------ - ---------
'حدد الدالة LoadXMLFile()، التي تتلقى معلمتين:
'strXMLFile - مسار واسم ملف XML 'strXSLFilee - مسار واسم ملف XSL'------------------------- ------- ----------------------------------
وظيفة LoadXMLFile (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) & "']/FieldValue")
'اربط البيانات المقدمة بواسطة النموذج بقيم العقدة في مستند XML.
objField.Text = Request.Form(x)
نهاية إذا
التالي
'احفظ ملف XML الذي تم تحريره.
objDom.Save strXMLFile
'حرر كافة المراجع إلى الكائن.
تعيين objDom = لا شيء
تعيين objRoot = لا شيء
تعيين objField = لا شيء
'استدعاء وظيفة LoadXMLFile لعرض ملف XML الذي تم تحريره حديثًا للعميل باستخدام ورقة أنماط UpdateUserData.xsl.
LoadXMLFile 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"?>
<!-- تم التعديل باستخدام XMLSPY v2004 rel.4 U ( http://www.xmlspy.com ) بواسطة Dicky (Apple'S Eden) -->
<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 حدد="UserInfo/Field">
<تر>
<TD>
<xsl:قيمة التحديد='@ID'/>
</TD>
<TD>
<xsl:value-of Select="FieldValue"/>
</TD>
</tr>
</xsl:لكل>
</الجدول>
<النموذج>
<input type = "button" value = "العودة" عند النقر = "history.go (-1)"/>
</النموذج>
</الجسم>
</html>
</xsl:قالب>
</xsl:stylesheet>
ما ورد أعلاه هو مجرد مثال بسيط لتطبيق XML عبر الأنظمة الأساسية، بناءً على الاحتياجات المحددة، يمكننا كتابة برامج أكثر قوة لإكمال عملنا الأكثر تعقيدًا. اجتازت كافة البرامج تصحيح الأخطاء ضمن بيئة Windows 2003 En+IIS 6.0+IE6.0+MSXML3.Dll.