1. قم بإنشاء مشروع ويب vs2003 جديد وقم بتسميته XMLTest
2. احذف كافة محتويات WebForm1.aspx في دليل المشروع، مع ترك عبارة واحدة فقط في الأعلى:
<%@ Page language="c#" Codebehind="WebForm1.aspx .cs" AutoEventWireup="false" يرث = "XMLTest.WebForm1" %>
3. قم بتعديل المحتوى في WebForm1.aspx.cs وأضفه إلى Page_Load:
ما يلي هو جزء مرجعي:
XmlDocument doc=new XmlDocument();
String xmlfile=string.Empty;
xmlfile=Context.Request.PhysicalApplicationPath+(Request.QueryString["sel"].ToString()=="xml"؟" \hello.xml":":\hello.xsl ");
doc.Load(xmlfile);
Response.Write(doc.InnerXml);
4. قم بإضافة test.htm في الدليل الجذر للمشروع وقم بتعيينه كصفحة رئيسية للمشروع:
وفيما يلي اقتباس:
<أتش تي أم أل>
<الرأس>
<العنوان></العنوان>
</الرأس>
<الجسم>
<div id="resTree"></div>
<FONTface="宋体"></FONT><input type="button" value="Execute" onclick="GetXml()"><BR>
<لغة البرمجة = "JScript">
فار srcTree,xsltTree,xt;
فار http_request = خطأ؛
الدالة GetXml()
{
srcTree = new ActiveXObject("Msxml2.FreeThreadedDOMDocument");
srcTree.async=false;
xsltTree= new ActiveXObject("Msxml2.FreeThreadedDOMDocument");
xsltTree.async = false;
xt=new ActiveXObject("MSXML2.XSLTemplate");
resTree.innerHTML="";
makeRequest("WebForm1.aspx?sel=xml",GetXml_CB);
}
دالة makeRequest(url,callback) {
http_request = خطأ؛
إذا (window.XMLHttpRequest) {// موزيلا، سفاري،...
http_request = new XMLHttpRequest();
إذا (http_request.overrideMimeType) {
http_request.overrideMimeType('text/xml');
}
} else if (window.ActiveXObject) { // IE
يحاول {
http_request = new ActiveXObject("Msxml2.XMLHTTP");
} قبض (ه) {
يحاول {
http_request = new ActiveXObject("Microsoft.XMLHTTP");
} قبض (ه) {}
}
}
إذا (!http_request) {
تنبيه ("الاستسلام :( لا يمكن إنشاء مثيل XMLHTTP")؛
عودة كاذبة.
}
http_request.onreadystatechange = رد الاتصال؛
http_request.open('GET', url, true);
http_request.send(null);
}
وظيفة GetXml_CB() {
إذا (http_request.readyState == 4) {
إذا (http_request.status == 200) {
srcTree.loadXML(http_request.responseText);
makeRequest("WebForm1.aspx?sel=xsl",GetXsl_CB);
} آخر {
تنبيه ("حدثت مشكلة في الطلب.")؛
}
}
}
الدالة GetXsl_CB(){
إذا (http_request.readyState == 4) {
إذا (http_request.status == 200) {
xsltTree.loadXML(http_request.responseText);
xt.stylesheet=xsltTree;
var proc=xt.createProcessor();
proc.input=srcTree;
proc.transform();
resTree.innerHTML=proc.output;
} آخر {
تنبيه ("حدثت مشكلة في الطلب.")؛
}
}
}
وظيفة makeRequest(url,callback) {
http_request = خطأ؛
إذا (window.XMLHttpRequest) {// موزيلا، سفاري،...
http_request = new XMLHttpRequest();
إذا (http_request.overrideMimeType) {
http_request.overrideMimeType('text/xml');
}
} else if (window.ActiveXObject) { // IE
يحاول {
http_request = new ActiveXObject("Msxml2.XMLHTTP");
} قبض (ه) {
يحاول {
http_request = new ActiveXObject("Microsoft.XMLHTTP");
} قبض (ه) {}
}
}
إذا (!http_request) {
تنبيه ("الاستسلام :( لا يمكن إنشاء مثيل XMLHTTP")؛
عودة كاذبة.
}
http_request.onreadystatechange = رد الاتصال؛
http_request.open('GET', url, true);
http_request.send(null);
}
</script>
</body>
</html>
5. قم بتشغيل المشروع وشاهد التأثير!
hello.xml (ملاحظة: مستند xml الخاص بي لا يحدد اسم ملف تحليل xsl المقابل)
ما يلي هو جزء من الاقتباس:
<?xml version='1.0'?>
<breakfast-menu>
<طعام>
<الاسم>وافل بلجيكي</name>
<السعر>5.95 دولار</السعر>
<وصف>اثنان من الفطائر البلجيكية الشهيرة لدينا
مع الكثير من شراب القيقب الحقيقي.</description>
<سعرات حرارية>650</سعرة حرارية>
</طعام>
<طعام>
<name>وافل بلجيكي بالفراولة</name>
<السعر>7.95 دولار</السعر>
<وصف>وافل بلجيكي خفيف مغطى
الفراولة والكريمة المخفوقة.</وصف>
<سعرات حرارية>900</سعرة حرارية>
</طعام>
<طعام>
<الاسم>وافل بيري بيري البلجيكي</name>
<السعر>8.95 دولار</السعر>
<وصف>وافل بلجيكي خفيف مغطى
مع مجموعة متنوعة من التوت الطازج
والكريمة المخفوقة.</وصف>
<سعرات حرارية>900</سعرة حرارية>
</طعام>
<طعام>
<الاسم>الخبز المحمص الفرنسي</الاسم>
<السعر>4.50 دولار</السعر>
<وصف>شرائح سميكة مصنوعة منزليا
خبز مخمر.</وصف>
<سعرات حرارية>600</سعرة حرارية>
</طعام>
<طعام>
<الاسم>الإفطار على الطريقة المنزلية</الاسم>
<السعر>6.95 دولار</السعر>
<وصف>بيضتان، لحم مقدد أو سجق، خبز محمص،
وحلوى الهاش براون الشهيرة لدينا.</description>
<سعرات حرارية>950</سعرة حرارية>
</طعام>
</breakfast-menu>
hello.xsl
فيما يلي جزء مقتبس:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl=" http://www.w3.org/1999/XSL/Transform ">
<xsl:template match="/breakfast-menu">
<xsl:for-each حدد = "food">
<DIV STYLE = "لون الخلفية: أزرق مخضر؛ اللون: أبيض؛ الحشو: 4 بكسل">
<SPAN STYLE="font-weight:bold; color:white"><xsl:value-of تحديد="name"/></SPAN>
إلى <xsl:قيمة تحديد = "السعر"/>
</DIV>
<DIV STYLE="margin-left:20px; هامش-أسفل:1em; حجم الخط:10pt">
<xsl:قيمة التحديد='الوصف'/>
<SPAN STYLE="font-style:italic">
<xsl:value-of تحديد = "السعرات الحرارية"/> مرحبًا
</سبان>
</DIV>
</xsl:for-each>
</xsl:template>
</xsl:ورقة الأنماط>
يحتوي مستند XML فقط على بيانات خالصة، إذا كان من الضروري عرضه في صفحة html، فيجب عمومًا استخدام مستند xsl مخصص للتحليل، أو قراءة القيمة في ملف xml يدويًا من خلال js وعرضها في شجرة dom في ملف xml. html.html عند استخدام مستند xsl، عند التحليل، يجب تحديد مستند xsl المقابل في مستند xml المقابل لعرضه بشكل طبيعي. ومع ذلك، عندما تقوم بعض البرامج بإخراج مستند xml ديناميكيًا، لا يتم تحديد مستند xsl المقابل. يجب تحميل مستند xsl المقابل من خلال وسائل أخرى. للتحليل، بالطبع، عند إخراج مستندات XML على جانب الخادم، يمكن أيضًا تحقيقه من خلال بعض واجهات برمجة تطبيقات XML. ما أصفه هنا هو طريقة لتحقيق ذلك من خلال JS. بهذه الطريقة، يتم وضع قيود النظام الأساسي للخادم جانبًا، ويحتاج الخادم فقط إلى إخراج مستند xml المقابل (يُقبل .net/j2ee)، وإخراج مستند xsl المقابل إلى العميل (يمكنه إخراج دفق أو مباشرة. في العميل يقوم بتحميل مستند xsl).
هناك بعض الأشياء التي يجب ملاحظتها هنا، نحن نستخدم بشكل عام مكون Msxml2.Document لتحميل مستندات xml، ولكن عند استخدام xsl ديناميكيًا لتحليل مستندات xml، يجب استخدام مكونات مؤشر الترابط المجانية مثل Msxml2.FreeThreadedDOMDocument، ويجب أن يكون MSXML2.XSLTemplate. تُستخدم مكونات القالب لتحميل بيانات xml وxsl من خلال طريقة التحويل الخاصة بـ MSXML2. قم بتثبيت حزمة مكونات msxml المحدثة وحدد اسمًا جديدًا، مثل Msxml2.FreeThreadedDOMDocument.4.0 يمكن تنزيله من موقع M$.
العرض التوضيحي: http://www.21cz.cn/xmltest/test.htm
عرض ملف xml: http://www.21cz.cn/xmltest/hello.xml
عرض ملف xsl: http://www.21cz.cn/xmltest/hello.xsl