我在C#中使用XDocument創建XML文檔。 我有一個問題。XML中名稱空間的區別
是相當於
<Example:Simple></Example:Simple>
<Simple xmlns = "Example"></Simple>
?
我試圖用C#中的XNamespace和XElement獲得第二個解決方案,但我只獲得第一個。
我在C#中使用XDocument創建XML文檔。 我有一個問題。XML中名稱空間的區別
是相當於
<Example:Simple></Example:Simple>
<Simple xmlns = "Example"></Simple>
?
我試圖用C#中的XNamespace和XElement獲得第二個解決方案,但我只獲得第一個。
第一個例子會在實施例命名空間的簡單元件(請注意,命名空間通常表示爲的URI)
第二個示例創建一個簡單元件在任何名稱空間是與示例前綴相關聯(由xmlns
屬性定義)。
這些是等價的:
<xml xmlns="http://example.com/myNameSpace">
<Simple></Simple>
</xml>
<xml xmlns="http://example.com/myNameSpace" xmlns:Example="http://example.com/myNameSpace">
<Example:Simple></Example:Simple>
</xml>
在第一個例子,你定義了默認命名它適用於不與自己的命名空間前綴的任何元素/屬性。
在第二個示例中,您尚未定義名稱空間。
不,因爲xml命名空間允許元素名稱不支持的字符,所以不能在元素標籤名稱前面加上名稱空間。
添加一個命名空間前綴,像這樣:
<alias:Simple xmlns:alias = "Example"></alias:Simple>
沒有,但它等同於:
<Example:Simple xmlns:Example="Example"></Example:Simple>
這是一個壞主意,使用相對URI作爲命名空間名稱,因爲這個XML現在具有不同的命名空間,取決於它來自何處。所以總是給出完整的URI。例如,如果正在從http://example.net/somePlace/someXML
收到的XML那麼相對URI Example
擴展到http://example.net/somePlace/Example
,所以充分利用它:
<Example:Simple xmlns:Example="http://example.net/somePlace/Example"></Example:Simple>
OR
<Simple xmlns="http://example.net/somePlace/Example"></Simple>
否則,如果有人在C:\Documents
保存它,然後再次打開它它就等於:
<Simple xmlns="file:///C|/Documents/Example"></Simple>
這意味着的含義這裏和第一次下載時完全不同。
命名空間**總是**表示爲URI-引用。它們通常表示爲絕對的URI引用而不是問題中的相對,因此它們不會改變含義。 – 2012-08-16 13:03:38