程式寫得不少,或多或少都操作過XML,但對XML的一些概念不是完全瞭解,最近來學習一些XML的基礎知識。
XML Namespaces 命名空間
不仔細去看或用到XML的命名空間,我們還是很少去瞭解他的,也不知道這到底有什麼用。
XML 命名空間就像.net程式的命名空間一下,可提供避免元素命名衝突的方法。
何來命名衝突?由於 XML 中的元素名是預定義的,當兩個不同的文檔使用相同的元素名時,就會發生命名衝突。
這個 XML 文檔攜帶著某個表格中的資訊:
<table> <tr> <td>Apples</td> <td>Bananas</td> </tr></table>
這個 XML 文檔攜帶有關桌子的資訊(一件傢具):
<table> <name>African Coffee Table</name> <width>80</width> <length>120</length></table>
假如這兩個 XML 文檔被一起使用,由於兩個文檔都包含帶有不同內容和定義的 <table> 元素,就會發生命名衝突,因為他的語義是不同的,也就是不同的東西,而我們都想把他命名為table。使用首碼來避免命名衝突
此文檔帶有某個表格中的資訊:
<h:table> <h:tr> <h:td>Apples</h:td> <h:td>Bananas</h:td> </h:tr></h:table>
此 XML 文檔攜帶著有關一件傢具的資訊:
<f:table> <f:name>African Coffee Table</f:name> <f:width>80</f:width> <f:length>120</f:length></f:table>
現在,命名衝突不存在了,這是由於兩個文檔都使用了不同的名稱來命名它們的 <table> 元素 (<h:table> 和 <f:table>)。通過使用首碼,我們建立了兩種不同類型的 <table> 元素。
當我們使用 XSL 時,就會看到實際使用中的命名空間。XSL 樣式表用於將XML文檔轉換為其他格式,比如 HTML。
<?xml version="1.0" encoding="ISO-8859-1"?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:template match="/">
</xsl:template>
.net 下的XML操作的命名空間,XmlNamespaceManager 解析集合的命名空間、向集合添加命名空間和從集合中移除命名空間,以及提供對這些命名空間的範圍管理,XPath 運算式中的任何首碼都使用提供的 System.Xml.XmlNamespaceManager 進行解析,如下是XPath的簡單樣本。
Console.WriteLine(x.DocumentElement.NamespaceURI);
XmlNamespaceManager xmlNamespace = new XmlNamespaceManager(x.NameTable);
xmlNamespace.AddNamespace("xsl", "http://www.w3.org/1999/XSL/Transform");
Console.WriteLine(x.SelectSingleNode("//xsl:template", xmlNamespace).NamespaceURI);
Console.WriteLine(x.SelectSingleNode("//xsl:template/html", xmlNamespace).NamespaceURI);
Console.ReadLine();