xml命名空间和xml文字

时间:2011-04-28 13:47:53

标签: vb.net xml-literals

我正在尝试使用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声明。为什么这样,可以避免吗?

1 个答案:

答案 0 :(得分:4)

这似乎是基于阅读Imports Statement (XML Namespace)的MSDN页面而设计的。

避免它的最简单方法是使用.NET 4.0中提供的SaveOptions.OmitDuplicateNamespaces enumeration

vbproj.AddAnnotation(SaveOptions.OmitDuplicateNamespaces)

如果.NET 4.0不是一个选项,那么您可以考虑清理命名空间,如以下两篇博文中所示: