<?xml version="1.0" encoding="utf-8" ?>
<Fruits Country="Taiwan" xmlns="http://xml.darkthread.net">
<Fruit Id="1">Mango</Fruit>
<Fruit Id="2">Banana</Fruit>
<Fruit Id="3">Bell Apple</Fruit>
</Fruits>
class LinqTest
{ public static void Test1()
{ XDocument xd = XDocument.Load("MiniData.xml"); //it will get "0"
Console.WriteLine(xd.Root.Elements("Fruit").Count()); }
public static void Test2()
{ XDocument xd = XDocument.Load("MiniData.xml"); XNamespace xn = "http://xml.darkthread.net";
//it will get correct answer "3"
Console.WriteLine(xd.Root.Elements(xn + "Fruit").Count());
}
}
重點來了! Test2裡只展示了一個xn + "Fruit"。事實是,程式裡所有用到Element Name, Attribute Name的地方全都要比照改寫,如果程式有兩三百處動用了Element、Attribute名稱,意味著要多寫兩三百個"xn +",實在很笨,難道不能設定Default Namespace嗎?
PS: 我偷偷地用了鋸箭法避開要加數百個XNamespace Prefix的問題-->在讀入前把XML原文中的xmlns宣告偷偷幹掉,當成什麼事都沒發生過。很鋸箭,小朋友不要學呀~~~