2017-08-10 3 views
1

J'ai besoin de gérer la variable 'AccountText', donc si je passe une valeur avec des caractères spéciaux par exemple "MC & CO", je ne devrais pas avoir d'erreur.gérer les caractères spéciaux dans fetch xml

var fetchXml = "<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='true'>" + 
       "<entity name='contact'>" + 
       "<attribute name='contactid' />" + 
       "<filter type='and'><condition attribute='parentcustomerid' operator='eq' name='" + AccountText + "' value='" + AccountID + "' /></filter>" + 
       "</entity>" + 
       "</fetch>"; 

Répondre

1

Pour autant que je sais FetchXML utilise la manipulation caractère spécial natif XML afin que vous puissiez l'esperluette comme &amp;

Par exemple:

<fetch version="1.0" output-format="xml-platform" mapping="logical" distinct="true" > 
    <entity name="account" > 
     <attribute name="accountid" /> 
     <filter type="and" > 
      <condition attribute="name" operator="eq" value="MC&amp;Co" /> 
     </filter> 
    </entity> 
</fetch> 

Pour le faire pour tous les caractères spéciaux, il existe plusieurs façons d'échapper une chaîne pour XML. Le plus rapide est peut-être utiliser la méthode System.Security.SecurityElement.Escape() dans la bibliothèque System.Web:

string xml = "<node>it's my \"node\" & i like it<node>"; 
string encodedXml = System.Security.SecurityElement.Escape(xml); 

qui délivre en sortie: &lt;node&gt;it&apos;s my &quot;node&quot; &amp; i like it&lt;node&gt;

Il y a plus d'exemples here

+0

Merci Ar sur, mais je veux quelque chose de plus générique, pour gérer toutes les expétions. – user2173466

+0

Je n'utilise pas .net/C#. – user2173466

+1

Vous pouvez également marquer la langue que vous utilisez. – Aron

3

Vous pouvez encoder le AccountText avant de l'inclure dans la requête:

AccountText = HttpUtility.HtmlEncode(AccountText);