ابهامی در پروتکل ECE وجود دارد (یا شاید هم من آن را درست نفهمیدهام) که به واسطه آن نمیشود فهمید که آیا در XMLهای آن باید از xml name space استفاده شود یا نه؟ و اگر بله، از چه name spaceی؟ در هر صورت به خاطر این ابهام، نبودن ابزارهای تست و اعتبار سنجی و عدم پایبندی کامل خیلی از پیاده سازان پروتکل ECE بهتر است در پیاده سازی خودمان امکان خواندن هر دو نوع حالت را در نظر بگیریم و به صورت یک option در خارج از کدهای برنامه و در اختیار مسئول سیستم بگذاریم. آنچه که در پی میآید روش کار با Xml Name Spaceها با کمک XmlDocument و XPath در دات نت است.
همانطور که میدانید xml name space امکانیست در XML که با کمک آن میتوان تگهای هم نام داشت بدون آنکه تداخل پیش بیاید. XPathی که برای یک تگ بدون name space نوشته میشود با آنی که برای یک تگ با name space نوشته میشود هم فرق دارد. مثلا XML زیر که بخشی از یک نمونه «ایکسامال ارسال» پروتکل ECE است را در نظر بگیرید:
<?xml version="1.0" encoding="utf-8"?>
<Letter>
<Protocol Name="ECE" Version="1.01" />
</Letter>
XPath استخراج اطلاعات نود Letter به شکل زیر است:
XmlNode xSend = xDoc.SelectSingleNode("//Letter");
حال اگر در فایل XML ما Xml NameSpace هم تعریف شده بود:
<?xml version="1.0" encoding="utf-8"?>
<Letter xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.irica.com/ECE/1383-12/SendSchema">
<Protocol Name="ECE" Version="1.01" />
</Letter>
بایستی از XPath و کدهای کمکی زیر برای استخراج اطلاعات استفاده کرد:
XmlDocument xDoc = new XmlDocument();xdoc.Load(filename);
XmlNamespaceManager manager = new XmlNamespaceManager(xdoc.NameTable);manager.AddNamespace("xsi", "http://www.irica.com/ECE/1383-12/SendSchema");
XmlNode xSend = xdoc.SelectSingleNode("//xsi:Letter", manager);
Comments
سلام
خبرخوان (تکست و گرافیکی)، لیست و فید وبلاگهای «آی تی» ارائه شده است که وبلاگ شما نیز جز آنها قرار گرفته است.
این خبرخوان یکی دیگر از محصولات همکاری جمعی در پرشین بلاگرز است که با همکاری و مدیریت آقای سید یوسف منیری به وبلاگشهر عرضه شده است.
http://persianbloggers.blogspot.com/2008/12/it-p.html
پرشین بلاگرز شما را به بازدید و استفاده از این خبرخوان و 24 خبرخوان دیگر موجود دعوت میکند.