2012-09-26 65 views
0

我想讀取一個xml字符串,然後通過插入另一個xml字符串來修改它,我不知道如何做到這一點,我掙扎着,因爲我是這個領域的初學者。我搜索網,我是真的的XmlWriter和XmlReader中之間confussing因爲我不想使用XmlDocument的 我發現這個來自微軟 http://msdn.microsoft.com/en-us/library/cc189056(v=vs.95).aspx使用xmlReader

所以我的代碼是這樣的

String Mainxmltext = "<ClosedKPICalls>" + 
    "<ServiceInfo> <ServiceNo>HR011</ServiceNo> <ServiceName>Petty cash</ServiceName> "+ 
    "<RecCount>0</RecCount> <RegdKPI>2</RegdKPI> </ServiceInfo> </ClosedKPICalls>"; 

    String xmlinnerText = "<TaskDetails> <name>Jhone</name> <Description>just for testing</Description> </TaskDetails>"; 

    StringBuilder output = new StringBuilder(); 
    using (XmlReader reader = XmlReader.Create(new StringReader(Mainxmltext))) 
    { 
     XmlWriterSettings ws = new XmlWriterSettings(); 
     ws.Indent = true; 
     using (XmlWriter writer = XmlWriter.Create(output, ws)) 
     { 

      // Parse the file and display each of the nodes. 
      while (reader.Read()) 
      { 
       switch (reader.NodeType) 
       { 

        case XmlNodeType.Element: 
         writer.WriteStartElement(reader.Name);       
         break; 
        case XmlNodeType.Text: 
         writer.WriteString(reader.Value); 

         break; 
        case XmlNodeType.XmlDeclaration: 
        case XmlNodeType.ProcessingInstruction: 
         writer.WriteProcessingInstruction(reader.Name, reader.Value); 
         break; 
        case XmlNodeType.Comment: 
         writer.WriteComment(reader.Value); 
         break; 
        case XmlNodeType.EndElement: 
         writer.WriteFullEndElement();       
         break; 
       } 
      } 
     } 
    } 


    MessageBox.Show(output.ToString()); 

} 

,所以我成功讀取第一個字符串現在我怎麼能對主XML之前,我的意思的結束標記前插入第二個測試,我的XML應該是這樣的

<ClosedKPICalls> 
<ServiceInfo> 
<ServiceNo>HR011</ServiceNo> 
<ServiceName>Petty cash</ServiceName> 
<RecCount>0</RecCount> 
<RegdKPI>2</RegdKPI> 
</ServiceInfo> 
<TaskDetails> 
<name>Jhone</name> 
<Description>just for testing</Description> 
</TaskDetails> 
</ClosedKPICalls> 

請幫助 謝謝

回答

1

Linq2Xml更易於使用。

String Mainxmltext = "<ClosedKPICalls>" + 
     "<ServiceInfo> <ServiceNo>HR011</ServiceNo> <ServiceName>Petty cash</ServiceName> " + 
     "<RecCount>0</RecCount> <RegdKPI>2</RegdKPI> </ServiceInfo> </ClosedKPICalls>"; 

String xmlinnerText = "<TaskDetails> <name>Jhone</name> <Description>just for testing</Description> </TaskDetails>"; 

XDocument xDoc = XDocument.Parse(Mainxmltext); 
xDoc.Root.Add(XElement.Parse(xmlinnerText)); 
var newxml = xDoc.ToString(); 

這是所有獲得您想要的XML

+0

XElement是不夠的?我們真的需要XDocument嗎?因爲在xml中沒有根,聲明。 – VJAI

+0

@Mark,當然,只是味道的問題。 –

+0

謝謝你的解決方案和它的完美工作,但是如果我想在MainxmlText中的多個地方添加xmlinnerText cuz,在這種情況下它會在最後一個標記之前添加它。也XDocument會影響內存? – Noora

0

我所有你想實現的是插入了一段XML來,你可以使用XElement類來實現一個XML字符串。

例如,

var xmlString = "<person></person>"; 

var xEl = XElement.Parse(xmlString); 

xEl.Add(XElement.Parse("<name>vijay</name>")); 

Console.Writeline(XEl); 

O/P

<person><name>vijay</name></person> 

谷歌爲XElement