我已经编写了一个脚本来解析上传到我们的应用程序的HTML文件中的一些所需代码。在OSX上,此过程运行良好。然而,当我上传到我们的测试服务器时,它没有。当我进入测试服务器上的控制台并试图解析文件时,Nokogiri不会看到结构——每次我得到的是一行输出,而不是整个文档结构。我的脚本的其余部分没有被执行,因为Nokogiri没有遍历文档。寻求有关如何解决问题的帮助。
以下是我用来打开文件并将其提供给Nokogiri的必要代码:
html = Nokogiri::HTML(File.open("index.html", "r"))
html等同于:
#<Nokogiri::HTML::Document:0x10d9bbf0 name="document" children=[#<Nokogiri::XML::DTD:0x10d9b81c name="html">]>
在OSX中,我得到了整个树,正如预期的那样。
以下是index.html:的内容
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<link rel="stylesheet" href="zero.css" type="text/css" charset="utf-8" />
</head>
<body class="fullpage-vert" onunload="javascript:clearInterval(audioLoop);">
<div id="container">
<div id="danceHolder">
<img id="danceVid" src="1-1.jpg" width="320" height="480" alt="" />
</div>
<div id="introHolder">
<img id="introVid" src="0-1.jpg" width="320" height="480" alt="" />
<div id="ctabg"></div>
<div id="cta1"></div>
<div id="cta2"></div>
<div id="cta3"></div>
<div id="phone"></div>
<div id="logo"></div>
</div>
</div>
<a href="mmbridge:*">bridge test</a>
<frameset cols="25%,75%">
<frame src="frame_a.htm" />
<frame src="frame_b.htm" />
</frameset>
</body>
</html>
例如,当我尝试搜索框架集时,我一无所获:
html.css("frameset").size
0
我知道Nokogiri的默认Libxml2版本安装在CentOS(2.6.2)上有问题,但我已经按照说明在新版本(2.7.8)上构建了它
# Nokogiri (1.5.0)
---
warnings: []
nokogiri: 1.5.0
ruby:
version: 1.9.2
platform: x86_64-linux
description: ruby 1.9.2p0 (2010-08-18 revision 29036) [x86_64-linux]
engine: ruby
libxml:
binding: extension
compiled: 2.7.8
loaded: 2.7.8
其他人见过这样的行为吗?
由于某些原因,交换
html = Nokogiri::HTML(File.open("index.html", "r"))
对于
html = Nokogiri::HTML(File.read("index.html"))
有效,尽管现在它无法正确计算行号(所有内容都是行号0)。