Вставка неэкранированных URL с помощью Nokogiri - PullRequest
0 голосов
/ 06 февраля 2019

У меня есть скрипт, который вставляет URL-адреса в существующие страницы XHTML.URL содержат коды отслеживания с амперсандами, и Nokogiri автоматически заменяет их на экранированную версию &.Я понимаю почему, но экранированный URL означает, что отслеживание не работает, так как код отслеживания был изменен.

Я выписал Как сохранить unescaped & в nokogiri xml? , Как мне вставить строку с амперсандом в xml-файл с Nokogiri? Предотвращение экранирования символов Nokogiri? , но я не совсем уверен, как использование компоновщика или cdata работает в контексте того, что я пытаюсь сделать.

Вот упрощенныйверсия того, что я сейчас делаю (с извлечением main_link из внешнего источника):

doc = Nokogiri::XML(open("file.xhtml"))
link = doc.css("a")[0] # the actual file may contain multiple links, not just one
main_link = "http://www.url.com/"
tag = "?blah&blah=blahblah"
link["href"] = main_link + tag
new_content = doc.to_xml
File.open("new_file.xhtml", "w") { |f| f.write(new_content) }

#=> <a href="http://www.url.com/?blah&amp;blah=blahblah">link</a>

Я сделал это, что работает:

content = File.read("file.xhtml")
content.gsub!("&amp;","&")
File.open("updated_file.xhtml", 'w') { |file| file.write(content) }

#=> <a href="http://www.url.com/?blah&blah=blahblah">link</a>

но я 'Мне бы хотелось избегать повторного открытия / сохранения файлов, поскольку я работаю со многими одновременно и хочу быть максимально эффективным.

Это выполнимо с Nokogiri?Должен ли я искать в другом месте, чтобы сделать это?

...