我正在使用Nokogiri在我的Sinatra,Ruby应用程序中进行一些页面处理。
所以当我这样做时:
require 'nokogiri'
s='<a href="<%=@prevHref%>">a</a>'
doc = Nokogiri::HTML.fragment(s)
puts doc.to_s
我得到了
<a href="%5C<%=@prevHref%%5C>">a</a>
代码已转义。我该如何避免这种情况?实际上我正在做的是:
- 在磁盘上打开模板
- 用Nokogiri解析它
- 替换一些节点(不是那些被转义的节点;其他一些节点)
- 将模板保存回磁盘
- 使用ERB解析模板,因为ERB标记被破坏,显然会失败。
醇>
2 个答案:
答案 0 :(得分:2)
在使用Nokogiri进行解析之前,必须先通过erb运行s
字符串。否则你正确地做到了。
答案 1 :(得分:0)
如本页其他地方所述,Nokogiri(更准确地说是libxml2)无法在内部表示Erb。例如,考虑这个生成值HTML输出的有效Erb模板:
<p<%="> Hello"%> World!<%="</p"%>>
如果你仔细想想,你会发现期望Nokogiri能够创造一个DOM是不合理的。
您需要使用使用有效标记的模板语言,而不是使用Erb(无法解析为HTML或XML)。例如:
- Amrita - 采用有效的X / HTML并与Ruby数据结构相结合,以生成HTML输出。
- Kwartz - 采用有效的X / HTML并与类似CSS的数据绑定文件结合生成Erb模板。