ruby - 使用 Nokogiri 插入未转义的 URL
问题描述
我有一个将 URL 插入现有 XHTML 页面的脚本。URL 具有带 & 符号的跟踪代码,Nokogiri 会自动将它们替换为转义版本&
。我明白为什么,但是转义的 URL 意味着跟踪不起作用,因为跟踪代码已更改。
我已经检查了如何在 nokogiri xml 中保存未转义的 &?,我怎样才能在 Nokogiri 的 xml 文件中放入一个带 & 符号的字符串?, 和防止 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 可行吗?我应该寻找其他地方来实现这一目标吗?
解决方案
推荐阅读
- python - 编写适配器删除工具,关于忽略序列大小写的建议
- mysql - 不可更改的用户名应该是 MySQL 表的主键吗?
- sql - 如何仅对 SQL 中的数据子集进行排名
- r - 无法访问 Web 上的数据 -URL HTTP 状态为“403 Forbidden”-
- visual-studio-code - vscode 开发容器如何使用单独的 docker-in-docker 环境?
- python - AttributeError: module 'chess' has no attribute 'Board' 棋盘错误
- python - 有谁知道如何在pygame中进行键盘按下。我已经尝试了所有我能想到的
- html - rvest - 仅选择类下的某些 href
- angular - 角卡在不调用函数的情况下翻转回来
- reactjs - 抛出错误给我 API 错误,而不是我写的