2011-04-05 12 views
0

xmlのノードをc#で追加、更新、または削除するにはどうしたらいいですか?私のXMLは以下の通りです。私はtransactionIDノードがほしくない。 corelationIDノードの後に​​<Transformation>XML</Transformation>というノードを追加します。c#を使用したxmlの操作

<?xml version="1.0" ?> 
<GovTalkMessage xmlns="http://www.govtalk.gov.uk/CM/envelope"> 
    <EnvelopeVersion>2.0</EnvelopeVersion> 
    <Header> 
     <MessageDetails> 
      <Class>HMRC-VAT-DEC</Class> 
      <Qualifier>poll</Qualifier> 
      <Function>submit</Function> 
      <TransactionID /> 
      <CorrelationID>1B93D48C02D740C6B79DE68A27F3ADE5</CorrelationID> 
      <ResponseEndPoint PollInterval="10">https://secure.dev.gateway.gov.uk/poll</ResponseEndPoint> 
      <GatewayTimestamp>2011-04-05T07:41:43.018</GatewayTimestamp> 
     </MessageDetails> 
     <SenderDetails /> 
    </Header> 
    <GovTalkDetails> 
     <Keys /> 
    </GovTalkDetails> 
    <Body /> 
</GovTalkMessage> 

答えて

0
//Load the XML 
    XmlDocument documentXML = new XmlDocument(); 
    documentXML.Load(Server.MapPath("AddDeleteUpdate.xml")); 

    XmlNamespaceManager xmlns = new XmlNamespaceManager(documentXML.NameTable); 
    xmlns.AddNamespace("bk", "http://www.govtalk.gov.uk/CM/envelope"); 

    //Identify the parent node i.e <MessageDetails> 
    XmlNode nodeMessage = documentXML.SelectSingleNode("//bk:GovTalkMessage/bk:Header/bk:MessageDetails", xmlns); 

    //Delete the node. 
    XmlNode nodeTransactionID = documentXML.SelectSingleNode("//bk:GovTalkMessage/bk:Header/bk:MessageDetails/bk:TransactionID", xmlns); 
    nodeMessage.RemoveChild(nodeTransactionID); 

    //Create the new XML noded to be added. 
    XmlNode controlAttrNode = null; 
    controlAttrNode = documentXML.CreateElement("Transformation"); 
    controlAttrNode.InnerText = "XML"; 
    controlAttrNode.Attributes.RemoveAll(); 

    //Get the node object to where it need to be added. 
    XmlNode nodeCorrelation = documentXML.SelectSingleNode("//bk:GovTalkMessage/bk:Header/bk:MessageDetails/bk:CorrelationID", xmlns); 
    //Insert the node after. 
    nodeMessage.InsertAfter(controlAttrNode, nodeCorrelation); 

    documentXML.Save(Server.MapPath("AddDeleteUpdate.xml")); 
2

最も簡単に使用できるのは、LINQ to XMLです。例えば:あなたは

XMLNode.InsertAfter(newChildNode,referenceChildNode) 

が必要になります

XDocument doc = XDocument.Load("file.xml"); 
XNamespace ns = "http://www.govtalk.gov.uk/CM/envelope"; 

// Remove TransationID 
XElement transactionElement = doc.Descendants(ns + "TransactionID").Single(); 
transactionElement.Remove(); 

// Add XML: 
XElement correlationElement = doc.Descendants(ns + "CorrelectionID").Single(); 
XElement newElement = new XElement(ns + "XML"); 
correlationElement.AddAfterSelf(newElement); 

// Save back 
doc.Save("new-file.xml"); 
+0

私はFramework 2.0を使用しています。だからLinqを使用することはできません。他の方法はありますか? – sachin

+0

@shakul:はい、XmlDocumentとXmlElementを使用できます。しかし、コードはもっと醜いでしょう:( –

関連する問題