如何在XPath中使用Heredocs

时间:2014-11-26 10:38:32

标签: ruby-on-rails ruby xpath heredoc

我遇到以下问题:

像这样有一个XPath(你可以看到很长时间):

'//h2[contains(text(),"Kontakt")]/../following-sibling::div[contains(@class,"body") and child::dl[contains(@class,"horizontal")]]'

现在,为了使其更具可读性,我尝试使用Heredoc将其分成多行:

xpath = <<-XPath.gsub(/\s+/,'')
  //h2[contains(text(),"Kontakt")]/..
  /following-sibling::div[contains(@class,"body") and
  child::dl[contains(@class,"horizontal")]]
XPath

然而,问题是.gsub(/\s+/,'')将删除所有空格。我只是删除\n.strip尝试了不同的组合,但我似乎无法找到输出xpath的解决方案,如上所示。

有什么想法?

1 个答案:

答案 0 :(得分:0)

您尝试以不同的方式处理相同的情况(第1→第2个字符串和第2个→第3个字符串):在第一种情况下连接字符串并在后者中插入空格。需要AI来理解你的意思:)

我建议你不要在太空位置打破弦乐。在这种情况下/\s*\n\s*|\A\s+|\s+\Z/m regexp(删除用空格,开始和尾随空格包围的回车)将起作用:

xpath = <<-XPath.gsub(/\s*\n\s*|\A\s+|\s+\Z/m,'')
  //h2[contains(text(),"Kontakt")]/..
  /following-sibling::div[contains(@class,"body") and child
  ::dl[contains(@class,"horizontal")]]
XPath

# "//h2[contains(text(),\"Kontakt\")]/../following-sibling::div[contains(@class,\"body\") and child::dl[contains(@class,\"horizontal\")]]"