2011-04-28 178 views
3

我正在vb.net中嘗試xml文字,並且有些東西我沒有得到。這裏有一個小例子來說明問題。我將兩個PropertyGroup節點添加到空的Visual Studio項目中。第一種是加入作爲XML文本,第二爲new XElementxml命名空間和xml文字

Imports <xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
Module MyModule 
Sub Main() 
    Dim vbproj = <?xml version="1.0" encoding="utf-8"?> 
       <Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
       </Project> 

    vbproj.Root.Add(<PropertyGroup></PropertyGroup>) 
    Dim xNameSpace As XNamespace = "http://schemas.microsoft.com/developer/msbuild/2003" 
    vbproj.Root.Add(New XElement(xNameSpace + "PropertyGroup")) 

    Console.WriteLine(vbproj) 
End Module 

此代碼寫入以下輸出:

<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <PropertyGroup xmlns="http://schemas.microsoft.com/developer/msbuild/2003"></PropertyGroup> 
    <PropertyGroup /> 
</Project> 

正如你可以看到,第一PropertyGroup節點包含冗餘xmlns聲明。爲什麼會這樣,而且可以避免?

回答

4

這似乎是設計,基於閱讀MSDN頁Imports Statement (XML Namespace)

,以避免它是通過使用SaveOptions.OmitDuplicateNamespaces enumeration,這是在.NET 4.0中提供最簡單的方法:

vbproj.AddAnnotation(SaveOptions.OmitDuplicateNamespaces) 

如果.NET 4.0所示是不是一種選擇,那麼你可能會考慮清理的命名空間在這兩個博客文章:

+0

太棒了!我使用.Net 4,所以這對我來說非常合適!謝謝。我不知道這些SaveOptions ..不是很容易發現:-( – jeroenh 2011-04-28 19:42:06