我正在 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 声明。为什么会这样,可以避免吗? 最佳答案
这似乎是设计使然,基于阅读 Imports Statement (XML Namespace) 的 MSDN 页面。
避免它的最简单方法是使用 SaveOptions.OmitDuplicateNamespaces
enumeration ,它在 .NET 4.0 中可用:
vbproj.AddAnnotation(SaveOptions.OmitDuplicateNamespaces)
如果 .NET 4.0 不是一个选项,那么您可以考虑清理命名空间,如以下两篇博文所示:
XElement
以删除命名空间。 True
从子项中删除命名空间。 关于vb.net - xml 命名空间和 xml 文字,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5819643/