Ruby Nokogiri SAX解析器无法还原属性中的&转义字符问题
Ruby Nokogiri SAX解析器无法还原属性中的&转义字符问题
嘿,我来帮你捋清楚这个困惑——其实不是Nokogiri解析器的问题,是你用的inspect方法在“搞小动作”!
你看,你的代码里输出哈希的时候用了a.inspect,Ruby的inspect方法为了让字符串内容以更“安全可读”的形式展示,会把字符串里的特殊字符(比如&)转义成对应的HTML实体&。
咱们换个输出方式验证一下:把你的输出代码改成直接打印属性值,而不是用inspect,比如:
puts "name=#{name.inspect} a=#{a['a']}"
运行后你会看到正常的输出:
name="root" a=attribute & cie
这就说明Nokogiri其实已经正确把&解析成了&,只是inspect又把它转义回去了,才让你误以为解析失败。
至于你说<和>能正常显示解析后的<和>,那是因为这两个字符在Ruby字符串的inspect输出里不会被转义,所以你能看到正确的结果,而&恰好是inspect会处理的字符,才造成了这个误解。
总结下核心点:
- Nokogiri SAX解析器已经正确完成了
&amp;到&的还原 - 你看到的
&是Ruby的inspect方法转义后的结果,并非解析后的原始属性值
备注:内容来源于stack exchange,提问作者jean marc
相关产品推荐
相关产品推荐

