2013-10-02 6 views
6

Ich setze den Wert eines Elements innerhalb einer Nachrichtenzuweisungsform einer Orchestrierung. Ich verwende XPATH Funktion, es zu tun.BizTalk - CDATA in einer Nachrichtenzuweisungsform

Der Text muss in einem CDATA Abschnitt enthalten sein. Dies ist, wie ich versuchte, es zu tun:

xpath(messageOut, "//Envelope/Body/MsgFFmt") = @"<![CDATA[" + _response + @"]]>"; 

jedoch BizTalk entkommt er und der Text innerhalb des Elements endet wie folgt aussehen:

<MsgFFmt>&lt;![CDATA[response content goes here]]&gt;</MsgFFmt> 

Ich kann nicht scheinen, nichts auf die finden Web in Bezug auf BizTalk angewiesen, dass ich eine CDATA Abschnitt um meine _response Zeichenfolge benötigen. Jeder kann helfen?

Dank

+1

Haben Sie diesen Blog gesehen? http://soa-thoughts.blogspot.co.nz/2007/07/cdata-mapping-experience-inside-biztalk.html – Dijkgraaf

+0

Vielen Dank! Ich habe etwas implementiert, was dem ähnlich ist, was im Artikel gezeigt wurde; das habe ich gebraucht! – gmang

Antwort

6

Ich werde meine eigene Frage beantworten, falls jemand zu teilen suchen. Dies wurde zu diesem Beitrag zugrunde: http://soa-thoughts.blogspot.co.nz/2007/07/cdata-mapping-experience-inside-biztalk.html

ich eine Helper-Klasse erstellen endete:

public class MessageHelper 
{ 
    /// <summary> 
    /// Sets a CDATA section in a XLANG message. 
    /// </summary> 
    /// <param name="message">The xlang message.</param> 
    /// <param name="xPath">The xpath for the element which will contain the CDATA section.</param> 
    /// <param name="value">The contents of the CDATA section.</param> 
    /// <returns>The resulting xml document containing the CDATA section</returns> 
    public static XmlDocument SetCDATASection(XLANGMessage message, string xPath, string value) 
    { 
     if (message == null) 
      throw new ArgumentNullException("message"); 

     if (message[0] == null) 
      throw new ArgumentNullException("message[0]"); 

     var xmlDoc = (XmlDocument)message[0].RetrieveAs(typeof(XmlDocument)); 

     var cdataSection = xmlDoc.CreateCDataSection(value); 
     var node = xmlDoc.SelectSingleNode(xPath); 

     if(node !=null) 
     { 
      node.InnerText = String.Empty; 
      node.AppendChild(cdataSection); 
     } 

     return xmlDoc; 
    } 
} 

Dies ist, wie Sie es von der Form nennen, nachdem die DLL GAC war:

MessageOut = MessageHelper.SetCDATASection(MessageOut, "/Envelope/Body/MsgFFmt", _string);