У меня есть скрипт, который вставляет 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&blah=blahblah">link</a>
Я сделал это, что работает:
content = File.read("file.xhtml")
content.gsub!("&","&")
File.open("updated_file.xhtml", 'w') { |file| file.write(content) }
#=> <a href="http://www.url.com/?blah&blah=blahblah">link</a>
но я 'Мне бы хотелось избегать повторного открытия / сохранения файлов, поскольку я работаю со многими одновременно и хочу быть максимально эффективным.
Это выполнимо с Nokogiri?Должен ли я искать в другом месте, чтобы сделать это?