2011-03-01 2 views
5

현재 파일 형식내가 자식 노드 요소에 접두사를 추가 XMLELEMENT 및을 XmlDocument를 사용하고 XML 노드

<Folio> 
<Node1>Value1</Node1> 
<Node2>Value2</Node2> 
<Node3>Value3</Node3> 
</Folio> 

원하는 출력

<vs:Folio> 
<vs:Node1>Value1</vs:Node1> 
<vs:Node2>Value2</vs:Node2> 
<vs:Node3>Value3</vs:Node3> 
</vs:Folio> 

에 접두사를 추가 난 할 수 없을거야 그것을 성취하십시오. 누군가가 나에게 올바른 방향으로 올바른 추진력을 줄 수 있다면 정말 감사 할 것입니다.

+1

난 그 노드의 노드가 절판에서 다른 네임 스페이스에 있었던 것을 의미하는 것이라고 생각하지만 기본 schama 또는 네임 스페이스가 없습니다 속성이 정의되었으므로 요점은 무엇입니까? 접두어를 추가하여 실제로 무엇을 달성하려고합니까? – BenCr

+0

@benCr이 정보가 도움이되기를 바랍니다. – Venki

+0

미안하지만 그렇지 않습니다. 어떤 종류의 오류가 있습니까? – BenCr

답변

7

XML 문서를로드 한 후 요소에 네임 스페이스를 추가하려고하면 불가능합니다.

MSDN에서

:

추가, 수정 또는 문서가 XML 문서 객체 모델에로드 한 후 XML 문서의 예에 XML 네임 스페이스 정의를 삭제할 수 없습니다 (XMLDOM) 구문 분석기. 에 사용되는 XML 노드는 XML 문서의 데이터를 나타내는 데 XMLDOM 파서에 문서를로드 할 때 만들어진 입니다. 이 노드 은 이 만들어 질 때 XML 네임 스페이스 특성에 영구적으로 바인딩됩니다. 따라서 빈 XML 네임 스페이스 선언 (xmlns = "")은 노드의 자식 노드에 추가 된 이며 이러한 노드의 기본 XML 네임 스페이스 특성을 보존합니다.

그러나 입력을로드하고 각 요소를 읽고 네임 스페이스가 설정된 다른 문서 (또는 메모리)에 쓸 수 있습니다. 다음은 xml 문자열을 구문 분석하고 네임 스페이스 접두사 및 네임 스페이스와 함께 새 xml 요소를 만드는 코드입니다.

  String xmlWithoutNamespace = 
       @"<Folio><Node1>Value1</Node1><Node2>Value2</Node2><Node3>Value3</Node3></Folio>"; 
      String prefix ="vs"; 
      String testNamespace = "http://www.testnamespace/vs/"; 
      XmlDocument xmlDocument = new XmlDocument(); 

      XElement folio = XElement.Parse(xmlWithoutNamespace); 
      XmlElement folioNode = xmlDocument.CreateElement(prefix, folio.Name.LocalName, testNamespace); 

      var nodes = from node in folio.Elements() 
         select node; 

      foreach (XElement item in nodes) 
      { 
       var node = xmlDocument.CreateElement(prefix, item.Name.ToString(), testNamespace); 
       node.InnerText = item.Value; 
       folioNode.AppendChild(node); 
      } 

      xmlDocument.AppendChild(folioNode); 

XMLDocument로 지금 대 접두사 각 노드와 XML을 포함

-1
private static void SetPrefix(string prefix, XmlNode node) 
    { 
     node.Prefix = prefix; 
     foreach (XmlNode n in node.ChildNodes) 
     { 
      //if (node.ParentNode != null) 
      //{ 
      if (n.Name.Contains("QualifyingProperties")) 
      { 
       break; 
      } 
      //} 
      SetPrefix(prefix, n); 
     } 
    } 
+3

이것은 기술적으로 질문에 대답 할 수 있지만 나는 던져진 소스 코드가 적절한 대답이라는 개념을 좋아하지 않습니다. 어떻게하면 * 어떻게 * OP 가슈를 해결할 수 있는지 자세히 설명해 주시겠습니까? –