Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
521 views
in Technique[技术] by (71.8m points)

c# - Encoding XPath Expressions with both single and double quotes

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']
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

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


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...