Link to home
Start Free TrialLog in
Avatar of tesmc
tesmcFlag for United States of America

asked on

C#: how to use xpath to escape a token

how do i use the below:

XmlNode node = doc.SelectSingleNode("/edt/ce[normalize-space(desc)='" + msg + "']/code");

in the event that the msg parameter contains an apostrophe or other special characters (since it is a string). (i.e. - Can't create Server object). This string exists in the xml . the <desc> tag does contain  special characters as well (since it's a string).

how do i escape special grammar characters like commas ,colon, parenthesis,  dash, slash , underscore)
Avatar of zc2
zc2
Flag of United States of America image

Replace the invalid characters in the msg with entities, something like
msg = msg.replace( "'", "&#x27;" )
Avatar of tesmc

ASKER

if i use a replace it won't find it in the xml then.
for example
msg =  Can't create Server object

and my xml file contains

<edt name="errors">
      <ce>
            <code>111</code>
            <desc>Not here</desc>
      </ce>
      <ce>
            <code>222</code>
            <desc>Can't create Server object </desc>
      </ce>
</edt>
ASKER CERTIFIED SOLUTION
Avatar of zc2
zc2
Flag of United States of America image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Avatar of tesmc

ASKER

@ zc2
your last comment worked successfully.
thanks.
This should work even if the search string contains both single and double quote characters:
            msg = "concat('" + msg.Replace( "'", "',\"'\",'" ) + "')";
            XmlNode node = doc.SelectSingleNode("/edt/ce[normalize-space(desc)=" + msg + "]/code");

Open in new window