Encoding XPath Expressions with both single and double quotes

Ryan picture Ryan · Mar 13, 2009 · Viewed 29.4k times · Source

XPath (v1) contains no way to encode expressions.

If you only have single OR double quotes then you can use expressions such as

//review[@name="Bob's Pizza"]
//review[@name='"Pizza" Pam']

But if you have BOTH e.g [Fred's "Fancy Pizza"] then you have to use something like this Escaping Strings in XPath (C++) to generate

//review[@name=Concat("Fred's ",'"Fancy Pizza"')]

Anyone have a function in c# to do this?

Some links that are close

EDIT: A few answers have suggested escaping ' with ' and " with " but although this makes sense it does not work; try it using the XML fragment:

<review name="Bob's Pizza"/>

and the xpath

//review[@name='Bob&apos;s Pizza']

Answer

Kaleb picture Kaleb · Jul 7, 2016

Wow, you all sure are making this complicated. Why not just do this?

public static string XpathExpression(string value)
{
    if (!value.Contains("'"))
        return '\'' + value + '\'';

    else if (!value.Contains("\""))
        return '"' + value + '"';

    else
        return "concat('" + value.Replace("'", "',\"'\",'") + "')";
}

.NET Fiddle & test