2012-02-06 32 views
2

我已经编写了一个脚本来解析出上传到我们的应用程序的HTML文件中的一些需要的代码。在OS X上,此过程正常工作。但是,当我上传到我们的测试服务器时,它不会。当我进入测试服务器上的控制台并试图解析文件时,Nokogiri将看不到结构 - 每次我得到一行输出而不是整个文档结构。我的脚本的其余部分没有被执行,因为Nokogiri没有遍历文档。寻找一些关于如何解决问题的帮助。Nokogiri没有在CentOS中读取/解析HTML文件的结构

下面是我用打开文件,并将其输送到引入nokogiri必要的代码:

html = Nokogiri::HTML(File.open("index.html", "r")) 

下面是HTML等同于:

#<Nokogiri::HTML::Document:0x10d9bbf0 name="document" children=[#<Nokogiri::XML::DTD:0x10d9b81c name="html">]> 

在OS X中,我得到了整个树,如预期。

这里的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有默认的问题在CentOS(2.6.2)上安装了Libxml2版本,但我已按照说明使其基于新版本(2.7.8)构建。这里是nokogiri -v的输出:

# 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 

是否有其他人看到过这样的行为?

+0

虽然我确信这是一个完全没有帮助的陈述,但我只是在Ubuntu中运行了您的示例,并且它运行良好。 – Gazler 2012-02-06 21:37:35

回答

1

出于某种原因,交换

html = Nokogiri::HTML(File.open("index.html", "r")) 

html = Nokogiri::HTML(File.read("index.html")) 

作品,虽然现在它不能正确计算行号(一切都行号0)。

+0

请注意,使用之前的代码,您将使文件句柄悬空。你应该试试:'html = File.open(file,'r'){| f | Nokogiri.HTML(f)}' – Phrogz 2012-02-07 19:49:01

+0

文件中的所有行结尾都是“\ n”吗? – 2012-02-10 06:49:33

+0

@JohnDouthat - 不确定。这是一个HTML文件,所以我假设如此。什么是最简单的方法来检查?只需输出解析的文件作为字符串? – 2012-02-10 14:20:22