Wednesday, November 25, 2009 - 文章

CODE-具有Default Namespace XML文件的查詢

我恨透了XML的Namespace, 尤其是xmlns這種預設Namespace。

每次寫Code處理這段都要東查西抄才能搞定,最慘的是連怎麼弄出來自己也模模糊糊。再不然就是走偏門,抓到OuterXML Replace掉xmlns="..."後重新LoadXml,當作沒有Namespace這回事(好像很多人也是這樣搞)。當然,這種態度是不對的,叔叔太頹廢了,小朋友們千萬不可以學~~

今日有幸承蒙chicken大師點化,終於學會怎麼正確處理Default Namespace,特貼文分享。

public static void TestNamesapce()
{
    XmlDocument xd = new XmlDocument();
    xd.LoadXml(@"
<root xmlns=""http://blog.darkthread.net"">
<item></item><item></item>
</root>");
    //太天真了,這樣是查不到的,0分
    Console.WriteLine(xd.SelectNodes("//item").Count);
    //對了,要指定Namespace
    XmlNamespaceManager nsm = 
        new XmlNamespaceManager(xd.NameTable);
    //加入預設的Namesapce,那就是空字串嗎?
    nsm.AddNamespace("", "http://blog.darkthread.net");
    //SelectNodes查詢時要傳入XmlNamespaceManager
    //代誌不像憨人想得那麼簡單... 還是零分
    Console.WriteLine(xd.SelectNodes("//item", nsm).Count);
    //請教chicken大師, 要自己加一個Alias
    nsm.AddNamespace("wtf", "http://blog.darkthread.net");
    //XPATH也要加上Namespace Prefix
    Console.WriteLine(xd.SelectNodes("//wtf:item", nsm).Count);
    //終於得到想到的結果... 感謝大師開示
}

搜尋

Go

<November 2009>
SunMonTueWedThuFriSat
25262728293031
1234567
891011121314
15161718192021
22232425262728
293012345
 
RSS
最新回應

Tags 分類檢視
關於作者

一個醉心技術又酷愛分享的Coding魔人,十年的IT職場生涯,寫過系統、管過專案, 也帶過團隊,最後還是無怨無悔地選擇了技術鑽研這條路,近年來則以做一個"有為的中年人"自許。

文章典藏
其他功能

這個部落格


BlogLook Score and Rank

Syndication