PDA

View Full Version : خواندن تگ xml دارای prefix



emad_67
یک شنبه 24 آذر 1387, 00:30 صبح
سلام
من یه فایل xml دارم مال feedburner هست به این شکل:


<rss xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
<channel>
<title>.........</title>
<description>........</description>
<link>http://www.test.com</link>
<item>
<title>.......</title>
<link>http://feeds.feedburner.com/~r/test/~3/481543819/test.html</link>
<description>..........</description>
<author>.....</author>
<feedburner:origLink>http://www.test.com/test.html</feedburner:origLink>
</item>
حالا من اگه بخوام اون تگ feedburner:origLink رو بخونم باید چیکار کنم؟
به صورت عادی که نمیشه خوندتش و ارور میگیره، با NamespaceManager هم نتونستم کاریش بکنم. به طور مثال یکی از حالت هایی که نوشتم این بود:


XPathDocument doc = new XPathDocument(RssLink);
XPathNavigator nav = doc.CreateNavigator();
XmlNamespaceManager NamespaceMgr = new XmlNamespaceManager(nav.NameTable);
NamespaceMgr.AddNamespace("feedburner", "http://rssnamespace.org/feedburner/ext/1.0");
XPathNavigator node = nav.Select("//channel/item",NamespaceMgr);
string link = node.SelectSingleNode("feedburner:origLink").Value;
حالت های دیگه رو هم تست کردم بازم ارور داد.

kiosksoft
یک شنبه 24 آذر 1387, 08:19 صبح
دوست عزیز از xpath استفاده کنید :

راهنمای کامل xpath :

http://www.w3schools.com/XPath/

emad_67
یک شنبه 24 آذر 1387, 09:27 صبح
دوست عزیز از xpath استفاده کنید :

راهنمای کامل xpath :

http://www.w3schools.com/XPath/
عزیز منم با همین xpath نوشتنش مشکل دارم. توی کد بالا هم دقت کنی از xpath برای خوندن استفاده کرم ولی اون تگی که prefix داره رو نمیدونم چیکارش کنم؟

kiosksoft
یک شنبه 24 آذر 1387, 10:52 صبح
دوست عزیز این رو یه تست بزنید

d.SelectNodes("//channel//item").Item(0).ChildNodes[4]


d.SelectNodes("//channel//item").Item(i).ChildNodes[i].InnerXml

emad_67
یک شنبه 24 آذر 1387, 11:27 صبح
ممنون حل شد.
البته شما از کلاس XmlDocument استفاده کردی.
برای کلاس XpathDocument هم الان فهمیدم مشکل چی بوده، باید NamespaceManager رو به متد SelectSingleNode میدادم:


XmlNamespaceManager NamespaceMgr = new XmlNamespaceManager(nav.NameTable);
NamespaceMgr.AddNamespace("b", "http://rssnamespace.org/feedburner/ext/1.0");
string link = node.SelectSingleNode("b:origLink",NamespaceMgr).Value;