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]

しかし、2番目のsetコマンドを実行すると、空の文字列が表示されます。しかし、明らかにタグのIDはmです。誰かが私がどこで間違っているのかわかりますか?

よろしく、Mithun

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をまっすぐに指し示していました。


アップデート

これは実際にはtDOM0.8.3で修正されたバグです。

于 2010-05-27T08:28:24.897 に答える