2013-02-06 12 views
0

기존 XML 파일에서 하나의 분기에만 객체 직렬화를 수행하고 싶습니다. 사용하여 읽는 동안 : 그것은 가능하다XmlTextWriter 객체를 XML 요소로 serialize

 RiskConfiguration AnObject; 

     XmlSerializer Xml_Serializer = new XmlSerializer(typeof(RiskConfiguration)); 
     XmlTextReader XmlReader = new XmlTextReader(@"d:\Projects\RiskService\WCFRiskService\Web.config"); 
     XmlReader.ReadToDescendant("RiskConfiguration"); 
     try 
     { 
      AnObject = (RiskConfiguration)Xml_Serializer.Deserialize(XmlReader); 
      AnObject.Databases.Database[0].name = "NewName"; 
     } 
     finally 
     { 
      XmlReader.Close(); 
     } 

, 나는 개체가 다시는 XML 파일에 기존의 다른 요소를 지우지 않고 파일을 저장할 수 있습니다 수행 편집하는 방법을 모르겠어요. 누구든지 나를 도울 수 있습니까?

원하는 항목 직렬화를 표시하는 방법을 찾았습니다. 붙여 넣기 대신 XML의 원래 요소에 지금 어떻게 가야합니까?

 StringWriter wr = new StringWriter(); 
     XmlWriterSettings settings = new XmlWriterSettings(); 
     settings.Indent = true; 
     settings.OmitXmlDeclaration = true; 
     settings.Encoding = System.Text.Encoding.Default; 

     using (XmlWriter writer = XmlWriter.Create(wr, settings)) 
     { 
      XmlSerializerNamespaces emptyNamespace = new XmlSerializerNamespaces(); 
      emptyNamespace.Add(String.Empty, String.Empty); 
      Xml_Serializer.Serialize(writer, AnObject, emptyNamespace); 
      MessageBox.Show(wr.ToString()); 
     } 
+0

xml 파일에 액세스하는 다른 프로그램이 있습니까? 아니면 그 프로그램을 사용하는 유일한 프로세스입니까? 그렇지 않으면 원본 XML을 보유하고있는 XDocument 또는 XmlDocument를 유지 관리하고 문서를 업데이트 할 때 serialise/deserialise 및 디스크로 플러시 할 관련 부분을 가져옵니다. – Jay

답변

2

우선 new XmlTextReader()을 중지해야합니다. NET 2.0 이후로는 더 이상 사용되지 않습니다. 대신 XmlReader.Create()을 사용하십시오.

둘째로, XML은 랜덤 액세스 매체가 아닙니다. 파일의 중간에 쓰고 앞뒤로 이동할 수 없습니다. 텍스트 기반 파일입니다.

파일을 "수정"해야하는 경우 파일의 새 버전을 작성해야합니다. 역 직렬화가 필요한 시점까지 원래 파일에서 노드를 파일의 새 버전으로 작성할 수 있습니다. 그런 다음 원본 파일에서 비 직렬화하고 개체를 수정 한 다음 새 버전으로 직렬화 할 수 있습니다. 그러면 원본에서 계속 읽고 새 버전으로 노드를 작성할 수 있습니다.

+0

확인. 하지만 원래 XML 요소 대신 직렬화 된 개체를 붙여 넣을 수있어서 네임 스페이스와 xml 헤더가 포함되지 않았습니까? –