4

我使用 tdom 版本 0.8.2 来解析 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]

但是当我执行第二个 set 命令时,我得到一个空字符串。但是很明显,标签的 id 为 m 。有人能告诉我哪里出错了吗?

问候,米通

4

1 回答 1

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 中修复的错误。

于 2010-05-27T08:28:24.897 回答