парсинг html-страниц из tcl - PullRequest
4 голосов
/ 27 мая 2010

Я использую 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, я получаю пустую строку. Но очистить тег имеет идентификатор м. Может кто-нибудь сказать, где я иду не так?

С уважением, Митхун

1 Ответ

3 голосов
/ 27 мая 2010

Проблема в том, что в вашем документе отсутствует объявление <!DOCTYPE>, поэтому tDOM не знает, что элемент 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...