我正在尝试使用vb.net中的xml文字而且有些东西我没有得到。这是一个说明问题的小样本。我将两个PropertyGroup
节点添加到空的Visual Studio项目中。第一个添加为xml文字,第二个添加为new XElement
:
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声明。为什么这样,可以避免吗?
答案 0 :(得分:4)
这似乎是基于阅读Imports Statement (XML Namespace)的MSDN页面而设计的。
避免它的最简单方法是使用.NET 4.0中提供的SaveOptions.OmitDuplicateNamespaces
enumeration:
vbproj.AddAnnotation(SaveOptions.OmitDuplicateNamespaces)
如果.NET 4.0不是一个选项,那么您可以考虑清理命名空间,如以下两篇博文中所示:
XElement
上使用的扩展方法,以删除命名空间。True
来从子项删除命名空间。