2014-11-26 4 views
0

борюсь со следующей проблемой:Как использовать Heredocs с XPath

Иметь 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, как показано выше.

Любые тысячи?

ответ

0

Вы пытаетесь обрабатывать те же случаи (1-я → 2-я строка и 2-я → 3-я строка) по-разному: объединить строки в первом случае и вставить пространство в последнем. Существует AI, чтобы понять, что вы имели в виду :)

Я бы предложил вам не сломать строку в пространстве. В таком случае /\s*\n\s*|\A\s+|\s+\Z/m регулярное выражение (удалить возврат каретки окружали с пробелами, начиная и завершающие пробелы) будет работать:

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\")]]" 
+0

Спасибо за вашу помощь :) – Severin