2013-07-18 6 views
2

기존 XML 문서가 있습니다.xmlns 특성을 기존 XML 문서에 추가하는 방법

예컨대

<Test> 
    <A /> 
</Test> 

나는하여 XDocument으로이 XML을로드합니다. 이 xmlns 특성을이 문서에 추가하고이 특성으로 저장해야합니다.

var xml = new XDocument.Load("c:\\filePath.xml"); 

것은 나는이 노력하고있어 경우 :

xml.Root.SetAttributeValue("xmlns", "http://namespaceuri"); 

내가 갖는 예외 :

System.Xml.XmlException: The prefix '' cannot be redefined from 'http://namespaceuri' to within the same start element tag. 

감사

당신은 네임 스페이스로 이름을 설정해야
+1

무엇을하려고합니까? 'Test'와'A' 요소의 네임 스페이스를 변경하려고합니까? –

+0

아니, 그냥 xmlns 특성을 루트 요소에 추가하고 싶습니다. 존의 대답은 내 문제를 해결했다. – zosim

+0

Jon의 답변이 요소의 네임 스페이스를 변경했습니다. –

답변

7

뿐만 아니라 :

XNamespace ns = "http://namespaceuri"; 
foreach (var element in xml.Descendants().ToList()) 
{ 
    element.Name = ns + element.Name.LocalName; 
} 
xml.Root.SetAttributeValue("xmlns", ns.ToString()); 

기본적으로 모든 요소를 ​​해당 네임 스페이스 으로 이동하려고하면 루트 요소의 기본 네임 스페이스가 아래로 변경됩니다. 요소 네임을 다른 네임 스페이스로 유지하면서 기본 네임 스페이스를 변경할 수는 없습니다. 이 코드는 모든 요소의 네임 스페이스를 변경됩니다

<Test xmlns="http://namespaceuri"> 
    <A /> 
</Test> 

참고 : (A를 닫 고정) 샘플 XML을 위의 코드를 사용하여

함께 끝납니다. 좀 더 선택적으로 전화를 걸려면 xml.Descendants() 통화 후 Where 통화를 추가해야합니다.

foreach (var element in xml.Descendants() 
          .Where(x => x.Name.Namespace == XNamespace.None) 
          .ToList()) 
+0

@JeffMercado : 아마도. 내가 물어 보려는 메모를 추가합니다 ... –

관련 문제