可能重复:
In Ruby, can you perform string interpolation on data read from a file?
我需要循环一些'li'元素:
for i in 1..5
Xpaths.getPath("location","elements")
end
然后,所有xpath都在外部文件中,因此这些'elements'变量的值如下:
{
"location":
{
"elements" :"//ul[@id='locations']/li[#{i}]/a"
}
}
元素变量读取为字符串,[#{i}]不会替换为[1]等值。有没有办法将外部文件中字符串的特定部分定义为变量?
答案 0 :(得分:0)
如果我正确理解你的问题,你有一些JSON格式的外部数据文件,其结构中有一些字段作为你希望执行Ruby字符串插值的XPath字符串。
简短的回答是,你可以直接使用,Kernel#eval。还有其他选项,例如使用erb。使用简单“eval”路线的解决方案可能如下所示:
xpaths = JSON.load(File.read('my-xpaths.json'))
(1..5).each do |i|
xpath = eval(xpaths['location']['elements'].to_json)
# => "//ul[@id='locations']/li[1]/a"
end
当然,使用“eval”充满了危险,因为您实际上是从其他来源执行代码,因此您必须采取许多预防措施来确保安全。更好的方法可能涉及进行简单的正则表达式替换,以便您可以约束XPath项上的插值:
xpaths['location']['elements'] # => "//ul[@id='locations']/li[__INDEX__]/a"
xpath = xpaths['location']['elements'].gsub(/__INDEX__/, i.to_s)
# => "//ul[@id='locations']/li[1]/a"
另请参阅此相关问题:In Ruby, can you perform string interpolation on data read from a file?