2009-11-25 8 views
3

나는 다음과 같은 XML 파일이 : 나는 버전 2를 출시하고변화 XML 네임 스페이스

<?xml version="1.0" encoding="utf-8"?> 
<ABC version="1" xmlns="urn:Company"> 
</ABC> 

및 네임 스페이스는 "NewCompany"로 변경되었습니다. 네임 스페이스를 어떻게 업데이트합니까?

제가

을 XmlDocument = 새로운

하는 XmlDocument을 XmlDocument 시도(); (XmlReader xmlReader = XmlReader.Create ("myfile.xml")) }

 XmlNodeList nodeList = xmlDocument.GetElementsByTagName("ABC"); 
     if (nodeList.Count == 1) 
     { 
      XmlElement element = nodeList.Item(0) as XmlElement; 
      if (element != null) 
      { 
       element.SetAttribute("xmlns", "NewCompany"); 

       XmlWriterSettings settings = new XmlWriterSettings(); 
       settings.Indent = true; 
       using (XmlWriter writer = XmlWriter.Create("myfile.xml", settings)) 
       { 
        xmlDocument.WriteTo(writer); 
       } 
      } 
     } 

는하지만 "같은 시작 요소 태그 안에까지 재정의 할 수 없습니다 접두사 ''." 를 얻을 수 예외

답변

0

오늘이 문제가 발생하여 회피 방법을 발견했습니다. XmlWriter 대신 XmlTextWriter를 사용하면 문제가 해결됩니다. 귀하의 코드 샘플은 다음과 같이 보일 것입니다 :

XmlNodeList nodeList = xmlDocument.GetElementsByTagName("ABC"); 
    if (nodeList.Count == 1) 
    { 
     XmlElement element = nodeList.Item(0) as XmlElement; 
     if (element != null) 
     { 
      element.SetAttribute("xmlns", "NewCompany"); 

      using (XmlTextWriter writer = new XmlTextWriter("myfile.xml", Encoding.UTF8)) 
      { 
       writer.Formatting = Formatting.Indented; 
       xmlDocument.WriteTo(writer); 
      } 
     } 
    } 
내가 XmlWriter.Create 단순히 XmlTextWriter에 반환됩니다 것을 상상 싶지만, 그런 경우가 될 것 같지 않습니다

. Reflector를 둘러 보면서 XmlWriter.Create는 XmlTextWriter에서 과 다른 구체적인 유형 인을 반환하는 것으로 보입니다.

XmlTextWriter는 XmlWriter.Create에서 반환 한 작성자가 문서 요소의 네임 스페이스를 변경하는 것을 지원하는 것 같습니다.

나는이 질문이 4 살이지만, 아마도 내 대답은 누군가를 도울 것이라고 생각한다.