2011-06-19 38 views
0

我想從一個XmlDocument分離一些XmlElement爲了將其插入到另一個。但是當我這樣做時,帶有命名空間的後代節點自動獲得xmlns屬性。由於某種原因,目標xml文件無法通過設置了所有子名稱空間的自定義驗證。是否有一個選項可以向後代傳播xmlns如何禁用xmlns傳播給兒童

下面的代碼說明了問題 - 執行結果是<MakesMeSick:three xmlns:MakesMeSick="http://tempuri.org" />

using System.Xml; 

class Program 
{ 
    static string xml = @" 
<mydoc> 
    <one xmlns:MakesMeSick=""http://tempuri.org""> 
     <two> 
      <MakesMeSick:three /> 
     </two> 
    </one> 
</mydoc> 
"; 
    static void Main(string[] args) 
    { 
     XmlDocument doc = new XmlDocument(); 
     doc.LoadXml(xml); 
     XmlNode n = doc.SelectSingleNode("/mydoc/one/two"); 
     System.Console.WriteLine(n.InnerXml); 
    } 
} 
+0

應該是什麼結果? ''? – svick

+0

'' – Mike

+0

這不是一個格式良好的XML文檔。 – svick

回答

2

如果你有形式<prefix:localname>的元素,那麼你必須在該元素的xmlns:prefix="whatever"某處或解釋什麼是URI prefix映射到一個祖先。沒有關聯URI的前綴是沒有意義的。

所以,在你的例子中,輸出<MakesMeSick:three xmlns:MakesMeSick="http://tempuri.org" />是正確的。如果xmlns丟失,那麼它將不是有效的XML文檔。

0

你的目的不是隻複製elemnt,你的目的是要改造它:命名空間中的XML元素名稱的一部分就像在C#或Java中一樣。因此,您必須使用XPath來應用一些手動編碼,並將注意力集中在local name上,或者對於更多涉及的內容,甚至可以使用XSLT。