2016-01-13 6 views
1
XmlDocument doc = new XmlDocument(); 

string soapEnvelope = 
@"<s:Envelope xmlns:s=""http://schemas.xmlsoap.org/soap/envelope/""> 
<s:Body xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance""  xmlns:xsd=""http://www.w3.org/2001/XMLSchema""> 
<ExternalProcessingStatusUpdate xmlns=""http://tempuri.org/""> 
    <deliveryId>12232</deliveryId> 
    <success>true</success> 
    <message>Completed</message> 
    </ExternalProcessingStatusUpdate> 
    </s:Body> 
</s:Envelope>"; 


doc.Load(new StringReader(soapEnvelope)); 

//Create a new node. 
XmlElement elem = doc.CreateElement("orderId"); 
elem.InnerText = "ORDER_994865453"; 

XmlNode root = doc.DocumentElement; 

var nsmgr = new XmlNamespaceManager(doc.NameTable); 
nsmgr.AddNamespace("rate", "http://www.w3.org/2001/XMLSchema"); 
var node = doc.SelectSingleNode("//rate:ExternalProcessingStatusUpdate", nsmgr); 

doc.InsertAfter(elem, node.FirstChild); 

Я хочу вставить новый элемент «orderId» после элемента «deliveryid» в приведенной выше строке Xml. Как я могу решить эту проблему?Добавить XmlElement под другим XmlElement

ответ

0

ExternalProcessingStatusUpdate имеет пространство имен по умолчанию (xmlns="..."), поэтому оно и его элементы-потомки без префикса находятся в этом пространстве имен по умолчанию. Это означает, что новый элемент orderId должен быть объявлен в этом пространстве имен тоже, в противном случае он будет создан не в пространстве имен, как <orderId xmlns="">, который я предполагаю, не то, что вы на самом деле хотите:

//Create a new node in "http://tempuri.org/" namespace 
XmlElement elem = doc.CreateElement("", "orderId", "http://tempuri.org/"); 
elem.InnerText = "ORDER_994865453"; 

Тогда вы должны позвонить InsertAfter() на родителе нового узла:

var nsmgr = new XmlNamespaceManager(doc.NameTable); 
nsmgr.AddNamespace("rate", "http://tempuri.org/"); 
var deliveryId = doc.SelectSingleNode("//rate:ExternalProcessingStatusUpdate/rate:deliveryId", nsmgr); 

deliveryId.ParentNode.InsertAfter(elem, deliveryId); 

dotnetfiddle demo

+0

amazi ng отвечает работает как очарование спасибо –

+0

@SagarJagadesh приветствую вас! и не забудьте [принять] (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work) ответ – har07