2011-04-05 2 views
0

C#을 사용하여 XML에서 노드를 추가, 업데이트 또는 삭제하려면 어떻게해야합니까? 내 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입니다. 예를 들어 :

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

. 그래서 그것 Linq 사용할 수 없습니다. 다른 방법이 있습니까 ?? – sachin

+0

@shakul : 예, XmlDocument 및 XmlElement를 사용할 수 있습니다. 하지만 코드는 훨씬 더 못 생길 것입니다. –

관련 문제