逃生XPath中单引号与引入nokogiri?(Escape single quote in XPa

2019-07-19 17:36发布

我有一个XPath查询,看起来像这样,既包含单引号和双引号。 如何正确逃生撇号以便查询工作?

我试过了:

"//li[text()='Frank's car']"

但它似乎并没有为我做的。

有任何想法吗?

 "//li[text()='Frank's car']"

Answer 1:

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邮件列表上线 ,如果你需要进一步采取这一两者可能是值得考虑的。



文章来源: Escape single quote in XPath with Nokogiri?