Encoding XPath Expressions with both single and double quotes
c#, xml, xpath, xpath-1.0
Solution
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
Problem
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 - Use the MVP.XML library and XPathVariable (a very good solution but a bit heavyweight for my needs). - Doesn't encode where both " and ' are present - Adds more arguments to the Concat operation than is necessary e.g. would return //review[@name=concat('Fred', "'", 's ', '"', 'Fancy Pizza', '"', '')] 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's Pizza'] ```