2012-02-06 47 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