我使用 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 。 有人能告诉我哪里出错了吗?
问候, 米顿
最佳答案
问题是您的文档缺少 <!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 中修复的错误。
关于html - 从 tcl 解析 html 页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2919456/