我之前有專門的文章讨論過在XML檔案中的命名空間問題,事實上,這個命名空間的設計是XML規範中惹來争議最多的一個部分。其出發點是為了更好地辨別元素,但事與願違,它其實更多的時候是增加了麻煩。這方面的讨論很多,這裡就不贅述了。
今天我還是用簡單的例子再說說如何在程式設計中處理命名空間的問題
1. 如何在建立XML文檔的時候加入命名空間
///建立一個帶有預設命名空間的XML元素
///該命名空間不帶字首
Console.WriteLine("建立一個帶有預設命名空間的XML元素");
XNamespace xn =
XElement root = new XElement(xn + "root",
new XElement("Item", "Sample"));
Console.WriteLine(root);
Console.WriteLine();
Console.WriteLine("建立一個帶有字首的命名空間");
///建立一個帶有字首的命名空間
XElement root2 = new XElement(xn + "root",
new XAttribute(XNamespace.Xmlns + "k", xn.NamespaceName),
Console.WriteLine(root2);
Console.WriteLine("建立一個帶有字首的命名空間,然後給元素也加上該空間");
///建立一個帶有字首的命名空間,然後給元素也加上該空間
XElement root3 = new XElement(xn + "root",
new XElement(xn+"Item", "Sample"));
Console.WriteLine(root3);
Console.WriteLine();

2. 如何讀取帶有命名空間的元素
假設我們有如下一個範例XML資料檔案,我們姑且将其命名為SampleData.xml
<?xml version="1.0" encoding="utf-8" ?>
<k:root xmlns="
<Item>Sample1</Item>
<k:Item>Sample2</k:Item>
</k:root>
然後看看代碼應該如何注意
string sampledata = "..\\..\\SampleData.xml";
XElement root = XElement.Load(sampledata);
XNamespace defaultns = "
XNamespace k = "
XElement item = root.Element(defaultns+"Item");//這是取得第一個元素,即便它沒有字首,也要添加一個預設的命名空間
Console.WriteLine(item);
XElement item2 = root.Element(k + "Item");