2010-05-27 138 views
4

我使用tdom版本0.8.2解析html頁面。從tcl解析html頁面

從幫助頁面,我發現下面的命令來獲得ElementById

TCL代碼

set html {<html> 
<head> 
</head> 
<body> 
<div id="m"> 
</div> 
</body> 
</html> 
} 
package require tdom 
set doc [ dom parse -html $html ] 
set node [ $doc getElementById m] 

但是,當我執行的第二組命令我得到一個空字符串。但清楚標籤有一個id。 有人可以告訴我哪裏錯了嗎?

問候, 大額牛

回答

3

的問題是,您的文檔缺乏<!DOCTYPE>聲明,所以TDOM不知道id元素將被解釋爲一個ID。

如果我們添加一個DOCTYPE,這一切工作......

package require tdom 
set html {<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"> 
<html> 
    <head> 
    </head> 
    <body> 
    <div id="m"> 
    </div> 
    </body> 
</html>} 
set doc [ dom parse -html $html ] 
set node [ $doc getElementById m] 
puts [$node asList] 

產生這樣的輸出對我來說:

div {id m} {} 

你可能已經檢查了文檔進行解析都做使用XPath查找元素是否可找到,如下所示:

puts [[$doc selectNodes "//*\[@id\]"] asList] 

因爲那個確實產生了正確的輸出(如上所述),顯然問題必須在於屬性的解釋,該屬性依次指向缺少的DOCTYPE。


更新

它實際上是固定在TDOM 0.8.3的錯誤。

+0

感謝您的回覆。您正在使用哪種tdom版本? 對於我來說,這仍然不起作用,例如在「puts [[$ doc selectNodes」// * \ [@ id \]「] asList]中,」這些命令產生相同的輸出。 但設置節點[$ doc getElementById m] 命令不起作用。 – Vidya 2010-05-27 08:57:49

+0

您需要tDOM 0.8.3。顯然(根據更新日誌),這是2007年10月30日修正的一個錯誤。 – 2010-05-27 09:40:52