我有一个XPath查询,看起来像这样,既包含单引号和双引号。 如何正确逃生撇号以便查询工作?
我试过了:
"//li[text()='Frank's car']"
但它似乎并没有为我做的。
有任何想法吗?
"//li[text()='Frank's car']"
我有一个XPath查询,看起来像这样,既包含单引号和双引号。 如何正确逃生撇号以便查询工作?
我试过了:
"//li[text()='Frank's car']"
但它似乎并没有为我做的。
有任何想法吗?
"//li[text()='Frank's car']"
XPath不具有转义特殊字符的任何方式,所以这是一个有点棘手。 在该特定情况下的解决办法是使用双引号,而不是在XPath表达式单引号:
text()="Frank's car"
如果你这样做,你必须,如果你使用周围的整个表达式双引号在Ruby中逃脱报价:
"//li[text()=\"Frank's car\"]"
你可以在这里使用单引号,如果你没有做任何的插值,然后逃离单引号:
'//li[text()="Frank\'s car"]'
一个更好的选择或许应该利用Ruby的灵活的报价,以便没有引号需要转义,例如:
%{//li[text()="Frank's car"]}
请注意,在这里做在Ruby中逃脱所有的例子,使到达的XPath处理器字符串//li[text()="Frank's car"]
更一般的情况下,当文本是可以包含单个或双引号的变量是比较困难的。 XPath的字符串文字不能包含两种类型的引号的; 你需要建立基于字符串的XPath concat
功能 。
例如,如果你想匹配字符串"That's mine", he said.
,你需要做的是这样的:
text()=concat('"That', "'", 's mine", he said.')
然后,你就必须(使用逃脱从红宝石引号%{}
将是最简单)。
我发现在这个问题在C#中SO处理另一个问题 ,并且将引入nokogiri邮件列表上线 ,如果你需要进一步采取这一两者可能是值得考虑的。