2

我正在使用 Nokogiri 在我的 Sinatra、Ruby 应用程序中进行一些页面处理。

所以当我这样做时:

require 'nokogiri'
s='<a href="<%=@prevHref%>">a</a>'
doc = Nokogiri::HTML.fragment(s)
puts doc.to_s

我明白了

<a href="%5C&lt;%=@prevHref%%5C&gt;">a</a>

代码被转义。我该如何避免这种情况?其实我在做的是:

  1. 打开磁盘上的模板
  2. 用 Nokogiri 解析它
  3. 替换一些节点(不是逃脱的节点;其他一些)
  4. 将模板保存回磁盘
  5. 使用 ERB 解析模板显然失败,因为 ERB 标记被破坏了。
4

2 回答 2

2

您必须先s通过 erb 运行字符串,然后才能使用 Nokogiri 解析它。否则你做对了。

于 2012-05-25T11:06:29.990 回答
0

如本页其他地方所述,Nokogiri(更准确地说是 libxml2)不能在内部表示 Erb。例如,考虑这个产生值 HTML 输出的有效 Erb 模板:

<p<%="> Hello"%> World!<%="</p"%>>

如果您仔细考虑一下,您会意识到期望 Nokogiri 能够从中创建 DOM 是不合理的。

您需要使用使用有效标记的模板语言,而不是使用 Erb(不能解析为 HTML 或 XML)。例如:

  • 甘露 - 采用有效的 X/HTML 并结合 Ruby 数据结构来生成 HTML 输出。
  • Kwartz - 采用有效的 X/HTML 并结合类似 CSS 的数据绑定文件来生成 Erb 模板。
于 2012-05-25T15:44:13.000 回答