【问题标题】:Escape single quote in XPath with Nokogiri?使用 Nokogiri 在 XPath 中转义单引号?
【发布时间】:2013-01-27 03:29:48
【问题描述】:

我有一个看起来像这样的 XPath 查询,带有单引号和双引号。如何正确转义撇号以便查询有效?

我试过了:

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

但它似乎不适合我。

有什么想法吗?

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

【问题讨论】:

标签: ruby xpath nokogiri


【解决方案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 function 构造字符串。

例如,如果您想匹配字符串"That's mine", he said.,您需要执行以下操作:

text()=concat('"That', "'", 's mine", he said.')

然后您必须从 Ruby 中转义引号(使用 %{} 是最简单的)。

我找到了another question on SO dealing with this issue in C#thread on the Nokogiri mailing list,如果您需要进一步研究,这两个可能都值得一看。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-09
    • 2019-04-01
    • 2021-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-25
    相关资源
    最近更新 更多