从tcl解析html页面

从tcl解析html页面,html,dom,tcl,tdom,Html,Dom,Tcl,Tdom,我使用tdom版本0.8.2解析html页面 在帮助页面中,我找到了以下命令来获取ElementById TCL代码 设置html{ } 包需要时差 set doc[dom parse-html$html] 设置节点[$doc getElementById m] 但是当我执行第二个set命令时,我得到一个空字符串。但是cleary标签的id是m。 有人能告诉我哪里出了问题吗 问候,, Mithun问题是您的文档缺少声明,因此tDOM不知道id元素将被解释为id 如果我们添加一个DOCTYPE,

我使用tdom版本0.8.2解析html页面

在帮助页面中,我找到了以下命令来获取ElementById

TCL代码
设置html{
}
包需要时差
set doc[dom parse-html$html]
设置节点[$doc getElementById m]
但是当我执行第二个set命令时,我得到一个空字符串。但是cleary标签的id是m。 有人能告诉我哪里出了问题吗

问候,,
Mithun

问题是您的文档缺少
声明,因此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]
您可以通过搜索查看元素是否可以使用XPath查找来检查文档是否被解析,如下所示:

puts [[$doc selectNodes "//*\[@id\]"] asList]
由于这确实产生了正确的输出(如上所述),很明显,问题必须出在属性的解释上,而属性的解释又直接指向缺少的DOCTYPE


更新
这实际上是一个在tDOM 0.8.3中修复的错误。

感谢您的回复。您使用的是哪个tDOM版本?对我来说,这仍然不起作用,因为在“puts[$doc selectNodes”//*[@id]“]asList]”中,命令会产生相同的输出。但是set node[$doc getElementById m]命令不起作用。您需要tDOM 0.8.3。显然(根据变更日志),这是一个2007-10-30修正的错误。
div {id m} {}
puts [[$doc selectNodes "//*\[@id\]"] asList]