0

重複の可能性:
Rubyでは、ファイルから読み取られたデータに対して文字列補間を実行できますか?

いくつかの「li」要素をループする必要があります。

for i in 1..5
  Xpaths.getPath("location","elements")      
end        

次に、すべてのxpathが外部ファイルにあるため、このような「elements」変数の値は次のようになります。

{ 
"location":
  {
  "elements"      :"//ul[@id='locations']/li[#{i}]/a"                                                           
  }
}              

elements変数は文字列として読み取られ、[#{i}]は[1]などの値に置き換えられません。外部ファイルの文字列の特定の部分を変数として定義する方法はありますか?

4

1 に答える 1

0

私があなたの質問を正しく理解しているなら、あなたはJSON形式の外部データファイルを持っています。その構造には、Ruby文字列補間を実行したいXPath文字列として特定のフィールドがあります。

簡単に言うと、はい、 Kernel#evalなどを使用して直接これを行うことができます。erbの使用などの他のオプションもあります。単純な「評価」ルートを使用するソリューションは、次のようになります。

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"

この関連する質問も参照してください。Rubyでは、ファイルから読み取られたデータに対して文字列補間を実行できますか?

于 2012-09-21T16:28:46.040 に答える