Still celebrating National IT Professionals Day with 3 months of free Premium Membership. Use Code ITDAY17

x
?
Solved

C#: how to use xpath to escape a token

Posted on 2014-04-30
5
Medium Priority
?
838 Views
Last Modified: 2014-05-06
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)
0
Comment
Question by:badtz7229
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 3
  • 2
5 Comments
 
LVL 19

Expert Comment

by:zc2
ID: 40032721
Replace the invalid characters in the msg with entities, something like
msg = msg.replace( "'", "&#x27;" )
0
 

Author Comment

by:badtz7229
ID: 40032729
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>
0
 
LVL 19

Accepted Solution

by:
zc2 earned 2000 total points
ID: 40032786
You are right, entity does not work.
If the apostrophe only could be in the string, then we could avoid using it in the xpath:
XmlNode node = doc.SelectSingleNode("/edt/ce[normalize-space(desc)=\"" + msg + "\"]/code");
0
 

Author Comment

by:badtz7229
ID: 40032801
@ zc2
your last comment worked successfully.
thanks.
0
 
LVL 19

Expert Comment

by:zc2
ID: 40032848
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

0

Featured Post

VIDEO: THE CONCERTO CLOUD FOR HEALTHCARE

Modern healthcare requires a modern cloud. View this brief video to understand how the Concerto Cloud for Healthcare can help your organization.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

The Client Need Led Us to RSS I recently had an investment company ask me how they might notify their constituents about their newsworthy publications.  Probably you would think "Facebook" or "Twitter" but this is an interesting client.  Their cons…
Exception Handling is in the core of any application that is able to dignify its name. In this article, I'll guide you through the process of writing a DRY (Don't Repeat Yourself) Exception Handling mechanism, using Aspect Oriented Programming.
Video by: ITPro.TV
In this episode Don builds upon the troubleshooting techniques by demonstrating how to properly monitor a vSphere deployment to detect problems before they occur. He begins the show using tools found within the vSphere suite as ends the show demonst…
This tutorial will teach you the special effect of super speed similar to the fictional character Wally West aka "The Flash" After Shake : http://www.videocopilot.net/presets/after_shake/ All lightning effects with instructions : http://www.mediaf…

704 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question