如何解决使用 Nokogiri xpath
我有一个私有的 gitlab 存储库,我想克隆它。我在环境变量中有密码。我的带有用户名和密码变量的 gitlab 存储库 URL 来自 XML 文件。
示例.xml
<git>
<name>repo</name>
<link>https://user:#{ENV['password']}@gitlab.com/myrepo.git</link>
</git>
Ruby 代码:
@sample = Nokogiri::XML(File.open("sample.xml")
repo_link = @sample.xpath("/git/link/text()")
Git.clone(repo_link,'repodir').checkout('master')
当我尝试上述代码时,#{ENV['password'] 没有得到解析并按原样传递给 GIT 模块。
当前: https://user:#{ENV['password']}@gitlab.com/myrepo.git
期望:
https://user:
请帮忙解决这个问题..
我可以修改 XML 文件、Ruby 代码或 GITLAB URL 格式。但是流程是固定的,URL 将在 XML 中的位置,我必须解析它并使用 Ruby 克隆存储库。
提前致谢!!
解决方法
#{}
在 XML 中没有任何意义; XML 解析器不会(也不应该)插入它...
您可以使用 ERB 模板,如下所示:
示例.xml
<% require 'cgi' %>
<git>
<name>repo</name>
<link>https://user:<%= CGI.escapeHTML ENV['password'] %>@gitlab.com/myrepo.git</link>
</git>
重要:我使用 CGI#escapeHTML
来确保您的密码不会破坏 XML。
Ruby 代码:
require 'erb'
xml = ERB.new(File.read('sample.xml'),nil,"<>").result
@sample = Nokogiri::XML(xml)
...
另一种解决方案是在 XML 中放置一个占位符,如下所示:
示例.xml
<% require 'cgi' %>
<git>
<name>repo</name>
<link>https://user:%{password}@gitlab.com/myrepo.git</link>
</git>
并将其替换为 Ruby 代码中的值:
require 'cgi'
xml = File.read.sub(/%{password}/,CGI.escapeHTML ENV['password'])
@sample = Nokogiri::XML(xml)
...
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。