每次寫Code處理這段都要東查西抄才能搞定,最慘的是連怎麼弄出來自己也模模糊糊。再不然就是走偏門,抓到OuterXML Replace掉xmlns="..."後重新LoadXml,當作沒有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); //終於得到想到的結果... 感謝大師開示
}