2011-04-28 7 views
3

vb.net에서 xml 리터럴을 실험하고 있습니다. 다음은 문제를 보여주는 작은 샘플입니다. 두 개의 PropertyGroup 노드를 빈 Visual Studio 프로젝트에 추가합니다.xml 네임 스페이스 및 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 선언을 포함하는 첫 번째 문자 XML, new XElement로 두 번째로 추가됩니다. 왜 그런가? 피할 수 있을까?

답변

4

이것은 디자인 상으로는 MSDN 페이지 Imports Statement (XML Namespace)을 기반으로 한 것으로 보입니다.

는 .NET 4.0에서 사용할 수있는 SaveOptions.OmitDuplicateNamespaces enumeration을 사용하는 것입니다 회피하는 가장 간단한 방법 :

vbproj.AddAnnotation(SaveOptions.OmitDuplicateNamespaces) 

같이 .NET 4.0은 다음 네임 스페이스를 청소하는 것이 좋습니다 옵션이없는 경우 이 두 블로그 게시물에 :

  • Cleaning up your XML literal namespaces - 네임 스페이스를 제거하기 위해 각 XElement에 사용되는 확장 메서드를 제공합니다.
  • More on XML Namespaces in VB.... - 두 번째 매개 변수에 True을 지정하여 루트 노드에서 사용하고 하위 항목에서 네임 스페이스를 제거 할 수있는 확장 방법을 제공합니다.
+0

대단원! 나는 넷을 사용하고있다. 그래서 이것은 나를 위해 완벽하게 작동한다! 고맙습니다. 나는이 SaveOptions에 대해 몰랐다. 아주 발견 할 수없는 :-( – jeroenh