2010-05-27 7 views
4

tdom 버전 0.8.2를 사용하여 html 페이지를 구문 분석합니다. 도움말 페이지에서 tcl의 HTML 페이지 구문 분석

나는

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] 

을 ElementById

를 얻기 위해 다음 명령을 발견하지만 두 번째 세트 명령을 실행할 때 나는 빈 문자열을 얻을. 하지만 태그의 ID는 m입니다. 누군가 내가 잘못 가고 있는지 말할 수 있습니까?

감사합니다, Mithun

답변

3

문제는 tDOM가 id 요소는 ID로 해석되어야 함을 알 수 없습니다 귀하의 문서가하는 <!DOCTYPE> 선언 부족 때문이다. 당신은 문서를 수행하여 모든 구문 분석되는 것을 확인할 수 있었다

div {id m} {} 

: 우리는 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에서 수정 된 버그입니다.

+0

답장을 보내 주셔서 감사합니다. 어떤 tdom 버전을 사용하고 있습니까? "puts [[$ doc selectNodes"// * \ [@ id \] "] asList]"명령이 동일한 출력을 생성하는 것처럼 나에게 여전히 작동하지 않습니다. 하지만 노드 [$ doc getElementById m] 명령이 작동하지 않습니다. – Vidya

+0

tDOM 0.8.3이 필요합니다. 분명히 (changelog에 따르면) 2007-10-30에 수정 된 버그였습니다. –