2012-06-01 3 views
0

격리 된 저장소에있는 기존 XML에 일부 노드 추가.격리 된 저장소에있는 기존 XML에 노드 추가

using (Stream stream = myIsolatedStorage.OpenFile("History.xml", FileMode.Open, FileAccess.ReadWrite)) 
         { 
          XDocument loadedData = XDocument.Load(stream); 

          var RootNode = new XElement("History"); 
          var RecipentN = new XElement("RecipentName", "ABC"); 
          var RecipentNo = new XElement("RecipentNumber", "ABABAB"); 
          var Time = new XElement("TimeStamp", "Monday"); 
          var MessageBody = new XElement("Message", "23"); 
          RootNode.Add(RecipentN, RecipentNo, Time, MessageBody); 
          loadedData.Root.Add(RootNode); 
          loadedData.Save(stream); 
         } 
        } 

나는 내 XML이

<?xml version="1.0" encoding="utf-8"?> 
<History> 
    <RecipentName>Arslan</RecipentName> 
    <RecipentNumber>03336329631</RecipentNumber> 
    <TimeStamp>123456</TimeStamp> 
    <Message>ABC</Message> 
</History 

<History> 
    <RecipentName>Arslanaa</RecipentName> 
    <RecipentNumber>03336329631</RecipentNumber> 
    <TimeStamp>123456</TimeStamp> 
    <Message>ABC</Message> 
</History 

그러나 기존 XML에 병합 내 코드가 잘못

<?xml version="1.0" encoding="utf-8"?> 
<History> 
    <RecipentName>Arslan</RecipentName> 
    <RecipentNumber>03336329631</RecipentNumber> 
    <TimeStamp>123456</TimeStamp> 
    <Message>ABC</Message> 
    <History> 
    <RecipentName>Java</RecipentName> 
    <RecipentNumber>John</RecipentNumber> 
    <TimeStamp>23</TimeStamp> 
    <Message>23</Message> 
    </History> 
</History> 

은 누구나 내가 기존 XML에 CAN 노드 어떻게 도와주세요 수처럼 윌 할 격리 보관소에 있습니다. 이 때문에

나는, 메인 루트 노드처럼 기록] 그러나 나는 작가로

    writer.WriteStartElement("History", ""); 

        writer.WriteStartElement("RecipentName", ""); 
        writer.WriteString("Arslan"); 
        writer.WriteEndElement(); 

        writer.WriteStartElement("RecipentNumber", ""); 
        writer.WriteString("03336329631"); 
        writer.WriteEndElement(); 

        writer.WriteStartElement("TimeStamp", ""); 
        writer.WriteString("123456"); 
        writer.WriteEndElement(); 

        writer.WriteStartElement("Message", ""); 
        writer.WriteString("ABC"); 
        writer.WriteEndElement(); 

        // Ends the document 
        writer.WriteEndDocument(); 
        writer.flush(); 

답변

1

안녕하세요 저는 마침내 예멘의 도움으로이 사실을 알았고 저의 일부는 R & D입니다. 여기

는 그 작업을 수행하는 다른 방법은

if (!myIsolatedStorage.FileExists("History.xml")) 
       { 
        using (IsolatedStorageFileStream isoStream = new IsolatedStorageFileStream("History.xml", FileMode.Create, myIsolatedStorage)) 
        { 
         XmlWriterSettings settings = new XmlWriterSettings(); 
         settings.Indent = true; 
         using (XmlWriter writer = XmlWriter.Create(isoStream, settings)) 
         { 
          writer.WriteStartElement("History", ""); 
          writer.WriteStartElement("SmSHistory", ""); 

          writer.WriteStartElement("RecipentName", ""); 
          writer.WriteString(RecipentName); 
          writer.WriteEndElement(); 

          writer.WriteStartElement("RecipentNumber", ""); 
          writer.WriteString(RecipentNumber); 
          writer.WriteEndElement(); 

          writer.WriteStartElement("TimeStamp", ""); 
          writer.WriteString(TimeStamp); 
          writer.WriteEndElement(); 

          writer.WriteStartElement("Message", ""); 
          writer.WriteString(Message); 
          writer.WriteEndElement(); 

          // Ends the document 
          writer.WriteEndDocument(); 

          // Write the XML to the file. 
          writer.Flush(); 
         } 
        } 
       } 

       else 
       { 
        XDocument loadedData; 
        using (Stream stream = myIsolatedStorage.OpenFile("History.xml", FileMode.Open, FileAccess.ReadWrite)) 
        { 
         // Load History.xml From Isolated Storage 
         loadedData = XDocument.Load(stream); 

         // Add SMS History Tags to XMLDocument 
         var RootNode = new XElement("SmSHistory"); 
         var RecipentN = new XElement("RecipentName", RecipentName); 
         var RecipentNo = new XElement("RecipentNumber", RecipentNumber); 
         var Time = new XElement("TimeStamp", TimeStamp); 
         var MessageBody = new XElement("Message", Message); 
         RootNode.Add(RecipentN, RecipentNo, Time, MessageBody); 

         // Find Root Element And Descedents and Append New Node After That 
         var root = loadedData.Element("History"); 
         var rows = root.Descendants("SmSHistory"); 
         var lastRow = rows.Last(); 
         lastRow.AddAfterSelf(RootNode); 
        } 

        // Save To History.xml File 
        using (IsolatedStorageFileStream myStream = new IsolatedStorageFileStream("History.xml", FileMode.Create, myIsolatedStorage)) 
        { 
         loadedData.Save(myStream); 
        } 
       } 
      } 
1

대상의 XML를 기록] 루트 노드를 추가하는 방법 XMLTextWritter 평균 쓸 수있는 방법이 유효하지 않습니다를 추가하는 문제가 없습니다 루트 노드 없음. 동일한 레벨에 두 개의 History 노드가 있습니다. 새 루트를 가진 행복 경우

(예를 들어 Histories) 당신은이 작업을 수행 할 수 있습니다이 당신에게 제공

// load original XML from the stream 
XDocument loadedData = XDocument.Load(stream); 

// create a new parent XML structure (new root) and load the original nodes 
var newXml = new XDocument(new XElement("Histories")); 
newXml.Root.Add(loadedData.Root); 

// create the new node 
var NewNode = new XElement("History"); 
var RecipentN = new XElement("RecipentName", "ABC"); 
var RecipentNo = new XElement("RecipentNumber", "ABABAB"); 
var Time = new XElement("TimeStamp", "Monday"); 
var MessageBody = new XElement("Message", "23"); 
NewNode.Add(RecipentN, RecipentNo, Time, MessageBody); 

// add the new node 
newXml.Root.Add(NewNode); 

// save the stream 
newXml.Save(stream); 

: 될 수있다

<Histories> 
    <History> 
    <RecipentName>Arslan</RecipentName> 
    <RecipentNumber>03336329631</RecipentNumber> 
    <TimeStamp>123456</TimeStamp> 
    <Message>ABC</Message> 
    </History> 
    <History> 
    <RecipentName>ABC</RecipentName> 
    <RecipentNumber>ABABAB</RecipentNumber> 
    <TimeStamp>Monday</TimeStamp> 
    <Message>23</Message> 
    </History> 
</Histories> 

당신이 원하는 것을.

+0

있는가 ... 나를 위해 작동 그건 내 코드 조각이다 ?? –

+0

다른 많은 방법이있을 것이라고 확신합니다. 그러나 원하는 방식 (최상위 수준에 두 개의 History 노드가 있음)은 잘못된 XML입니다. 잘못된 XML을 원한다면 파일 스트림의 끝 부분에 쓸 수는 있지만 그 생각은 나쁜 생각입니다. – yamen

관련 문제