2014-01-22 1 views
1

XElement에서 DataSet의 Diffgram을 얻으려면 어떻게해야합니까?C# Diffgram to XElement, Reader/Writer confusion

 // DataSet to Diffgram in a string: 
     StringBuilder sb = new StringBuilder(); 
     XmlWriterSettings settings = new XmlWriterSettings { Indent = true, Encoding = Encoding.UTF8 }; 
     using (XmlWriter xw = XmlWriter.Create(sb, settings)) 
     { 
      ds.WriteXml(xw, XmlWriteMode.WriteSchema);//XmlWriteMode.DiffGram 
     } 
     string str = sb.ToString(); 

하지만 문자열로 먼저 출력에의 DiffGram의 XML을 낭비 보인다 다음에 다시 구문 분석 : 나는 문자열에서의 DiffGram을 얻는 방법을 발견

(또는하여 XDocument) XElement.

 // I have a DataSet filled with some data 
     DataSet ds = new DataSet(); 
     ds.Tables.Add(ScanData); 

     // I need the diffgram of the DataSet in an XElement 
     XElement xe = null; 
     XmlReader xr = xe.CreateReader(); 

     // I could live with output to XDocument, and extract the XElement later 
     XDocument xd = new XDocument(); 
     XmlReader xrd = xd.CreateReader(); 

     // Q: How do I construct a stream that connects an XmlReader to ds.WriteXml()? 
     Stream stream = ...???... ; 

     // This method creates the DiffGram output format to a stream 
     ds.WriteXml(stream, XmlWriteMode.WriteSchema);//diffgram output 

내가 내 코드 문제에 대한 답을 찾을 수 있도록 노력하겠습니다 : 그래서 XML 변수로 변환하지 않고의 DiffGram의 XML을 전송해야하는이 코드에서 누락 된 링크를 입력하는 방법을 찾기 위해 노력하고있다 어쩌면 스트림/리더/라이터가 실제로 어떻게 작동 하는지를 배울 수도 있습니다.

답변

0

당신은 데이터 집합하여 XDocument에 쓸 작가가 아니라 독자를, 필요

XDocument xd = new XDocument(); 
using (var writer = xd.CreateWriter()) 
{ 
    ds.WriteXml(writer, XmlWriteMode.WriteSchema); // XmlWriteMode.DiffGram 
} 
+0

감사합니다! 간단하지만, 불행히도 여전히 자신을 해결하기가 어렵습니다. 나는 ds.WriteXml()이 FROM ds를 쓰고, xd.CreateWriter()가 xd에 쓰는 것을 준다는 것을 알 수 없었다. – Roland