html - 从 tcl 解析 html 页面

标签 html dom tcl tdom

我使用 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/

相关文章:

python - 为什么 easygui 在传递包含带嵌入空格的字符串的元组时插入大括号?

linux - Expect ,需要处理表达式并在屏幕上打印结果

html - 如何通过悬停 anchor 来更改不同div的样式属性?

html - 在自定义高度问题中添加完整视频

jquery - 使用jquery仅选择带有css属性显示的选择框结果

java - com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException : Invalid byte 2 of 4-byte UTF-8 sequence (XML)

javascript - JQuery - 将 DOM 元素移动到新父元素的动画?

javascript - AJAX 响应文本为空

javascript - 如何确保秒表功能在移动浏览器上继续运行

list - 如何从tcl列表中删除空元素