2012-08-16 100 views
3

我在C#中使用XDocument創建XML文檔。 我有一個問題。XML中名稱空間的區別

是相當於

<Example:Simple></Example:Simple> 

<Simple xmlns = "Example"></Simple> 

我試圖用C#中的XNamespace和XElement獲得第二個解決方案,但我只獲得第一個。

回答

6

第一個例子會在實施例命名空間的簡單元件(請注意,命名空間通常表示爲的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> 
+1

命名空間**總是**表示爲URI-引用。它們通常表示爲絕對的URI引用而不是問題中的相對,因此它們不會改變含義。 – 2012-08-16 13:03:38

1

在第一個例子,你定義了默認命名它適用於不與自己的命名空間前綴的任何元素/屬性。

在第二個示例中,您尚未定義名稱空間。

1

不,因爲xml命名空間允許元素名稱不支持的字符,所以不能在元素標籤名稱前面加上名稱空間。

添加一個命名空間前綴,像這樣:

<alias:Simple xmlns:alias = "Example"></alias:Simple> 
1

沒有,但它等同於:

<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> 

這意味着的含義這裏和第一次下載時完全不同。