:: Книга Юрия Шутенко
Глава 1. Html
JS
Автор

Сообщений: 12264
Откуда: Эстония
Дата регистрации: 04.09.2000
Сокращена насколько возможно


------------------
Knowledge is better than ignorance!
Website: juri.foxhelp.eu




Исправлено 1 раз(а). Последнее : JS, 16.07.08 18:34
Ratings: 0 negative/0 positive
Re: Глава 1. Html
has

Сообщений: 175
Откуда: Томск
Дата регистрации: 24.07.2004
На днях купил Вашу книгу - посоветовали на форуме, как хороший учебник, в том числе, по HTML-DOM.
Первая глава, действительно, посвящена именно HTML. И там даже обещано, что "Более подробно со свойствами и методами объектов HTML-документов вы можете ознакомиться в приложениях 1 и 2."
Вот только в приложениях 1 и 2 нет ни слова о HTML!
Возможно, это результат того самого "сокращения".
А можно где-нибудь найти эти исчезнувшие описания свойств и методов HTML-DOM.
Именно эта задача сейчас всплыла.
Я никогда этой темой не занимался, поэтому для меня эта структура - темный лес.
А на MSDN так все запутано - концов не найдешь.
Ratings: 0 negative/0 positive
Re: Глава 1. Html
has

Сообщений: 175
Откуда: Томск
Дата регистрации: 24.07.2004
Обнаружил в этой главе ошибку.
Там где идет речь о различиях коллекций childNodes и children, приведен пример:
lcHtmlTemplate=;
[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">]+;
[<html>]+;
[<head>]+;
[<title>HTML DOM для FOXers</title>]+;
[<meta name="Author" content="John Doe">]+;
[</head>]+;
[<body id="example1">]+;
[<form id="form1" name="test">]+;
[<h1 id="header1">Это заголовок</h1>]+;
[<p id="p1">Это <b>параграф</b>.</p>]+;
[</form>]+;
[</body>]+;
[</html>]
* создается пустой объект html-документа
loHtmlDocument=Createobject("htmlfile")
loHtmlDocument.Write(lcHtmlTemplate)
loDoctype=loHtmlDocument.firstChild
loBody = loHtmlDocument.childNodes.Item(1).childNodes.Item(1)
loPara = loBody.childNodes.Item(0).childNodes.Item(1)
И говорится, что значение loPara.childNodes.length должно быть 2, а, на самом деле, оно - 3 ! :al:
Тэг "<b>параграф</b>" входит в коллекцию childNodes и в коллекцию children.
Ratings: 0 negative/0 positive
Re: Глава 1. Html
JS
Автор

Сообщений: 12264
Откуда: Эстония
Дата регистрации: 04.09.2000
Увы, часть материала "ушла".
Дополнительные материалы, которые не вошли в книгу
будут на сайте juri.foxhelp.eu
Сейчас занимаюсь подготовкой.
Однако вы можете задать свои вопросы или здесь или в ЛС.

По второму сообщению - зависит от парсера. Более подробно
объясню позже - нужно уйти с работы пораньше.


------------------
Knowledge is better than ignorance!
Website: juri.foxhelp.eu




Исправлено 1 раз(а). Последнее : JS, 06.04.09 17:57
Ratings: 0 negative/0 positive
Re: Глава 1. Html
has

Сообщений: 175
Откуда: Томск
Дата регистрации: 24.07.2004
JS
Дополнительные материалы, которые не вошли в книгу
будут на сайте juri.foxhelp.eu
Приблизительные сроки известны? на что ориентироваться.
JS
Однако вы можете задать свои вопросы или здесь или в ЛС.
Хотелось бы описание объектов, методов, свойств HTML DOM. Пока собираю информацию по крупицам.
А так хотелось бы знать: какие объекты могут входить в коллекции? какие методы и свойства у них есть? И даже (вот наглость-то) что они значат?

Очень хотелось бы узнать что смотреть для проверки корректности загрузки HTML-файла?
loInetApp = CreateObject('InternetExplorer.Application')
loInetApp.Navigate('My_File.htm')
JS
По второму сообщению - зависит от парсера. Более подробно
объясню позже
Очень жду объяснения. Выходит, что результат работы с файлом зависит от каких-то внешних условий? Каких?
Версия Фокса, операционка, IE...
Ratings: 0 negative/0 positive
Re: Глава 1. Html
Влад Колосов

Сообщений: 22664
Откуда: Ростов-на-Дону
Дата регистрации: 05.05.2005
has, установите себе MSDN. Там найдете много интересного


------------------
Совершенство - это не тогда, когда нельзя
ничего прибавить, а тогда, когда нечего убавить.
Ratings: 0 negative/0 positive
Re: Глава 1. Html
has

Сообщений: 175
Откуда: Томск
Дата регистрации: 24.07.2004
Влад Колосов
has, установите себе MSDN.
Похоже, что я чего-то сильно не понимаю.
MSDN - это ведь сайт подразделения Microsoft поддержки разработчиков.
Так как его можно "установить" ?
Я опять чего-то сильно не знаю?...
Ratings: 0 negative/0 positive
Re: Глава 1. Html
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
MSDN это прежде всего набор документации. Он распространяется на дисках (причём есть несколько видов - в разной степени обрезанных - например в одной только .NET+VS описывется). Самое неприятное в этом деле - то что новые версии выходят достаточно регулярно (раз в квартал) - и надо либо оформлять подписку (чтоб тебе на дисках слали), либо постоянно качать образы дисков (несколько гигов), либо пользоваться "устаревшей" версией
Конечно же этот набор доступен и в онлайн - со специализированного сайта МС. Плюсы - доступ к самой свежей версии, бесплатность, меньший объём трафика (не надо качать ВСЁ если интересует пара-тройка статей). Ну минус очевиден - нужен инет под рукой


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Глава 1. Html
has

Сообщений: 175
Откуда: Томск
Дата регистрации: 24.07.2004
JS
По второму сообщению - зависит от парсера. Более подробно
объясню позже
Юрий, все-таки очень хочется услышать Ваше объяснение по этому вопросу.
Сразу как-то не сообразил, а вот стал работать с HTML DOM и понял:
ведь если Вы правы и при каких-то условиях (очень хочется узнать: каких?) подчиненные узлы разделяются (не пересекаясь) между коллекциями childNodes и children, то это означает полную неприменимость:al: данной технологии к обработке HTML-файлов.
Ведь в этом случае строки:
<p><b>Казнить </b><b> нельзя </b> , <b> помиловать</b>.</p>
и
<p><b>Казнить </b> , <b> нельзя </b><b> помиловать</b>.</p>
будут разобраны в абсолютно одинаковый набор коллекций childNodes и children.
А это, по-моему, сильно неверно! :-[
Ratings: 0 negative/0 positive
Re: Глава 1. Html
JS
Автор

Сообщений: 12264
Откуда: Эстония
Дата регистрации: 04.09.2000
Александр!
Все объясняется достаточно просто - разницей в версиях библиотеки mshtml.dll
используемой при написании книги и текущей. Плюс наличие частичной реализации
объектной модели DOM второго уровня в новой версии.

Цитата:
ведь если Вы правы и при каких-то условиях (очень хочется узнать: каких?) подчиненные узлы разделяются (не пересекаясь) между коллекциями childNodes и children, то это означает полную неприменимость данной технологии к обработке HTML-файлов.
Вовсе нет. Достаточно дополнительно использовать очень полезное свойство nodeType
и тогда все станет на свои места.


------------------
Knowledge is better than ignorance!
Website: juri.foxhelp.eu
Ratings: 0 negative/0 positive
Re: Глава 1. Html
has

Сообщений: 175
Откуда: Томск
Дата регистрации: 24.07.2004
JS
Все объясняется достаточно просто - разницей в версиях библиотеки mshtml.dll
используемой при написании книги и текущей. Плюс наличие частичной реализации
объектной модели DOM второго уровня в новой версии.
Спасибо, Юрий! Уже конкретнее, но не яснее и, тем более не радостнее. Если я правильно понимаю, то версия mshtml.dll определяется операционной системой? И у пользователя может быть иной результат разбора файла, чем у меня? И как в таком случае добиться однозначной обработки файла?
JS
Цитата:
ведь если Вы правы и при каких-то условиях (очень хочется узнать: каких?) подчиненные узлы разделяются (не пересекаясь) между коллекциями childNodes и children, то это означает полную неприменимость данной технологии к обработке HTML-файлов.
Вовсе нет. Достаточно дополнительно использовать очень полезное свойство nodeType и тогда все станет на свои места.
Хотелось бы понять как использовать свойство nodeType?
Если я правильно понимаю, то в обоих случаях результат (набор коллекций) будет один:
childNodes:
       |nodeType| innerHTML          | data
---------------------------------------------
Item(0)|   3    |                    | ' , '
---------------------------------------------
Item(1)|   3    |                    | '.'
---------------------------------------------
children:
       |nodeType| innerHTML          | data
---------------------------------------------
Item(0)|   1    | <b>Казнить </b>    |	
---------------------------------------------
Item(1)|   1    | <b> нельзя </b>    |
---------------------------------------------
Item(2)|   1    | <b> помиловать</b> | 
---------------------------------------------
И как тут определить взаимный порядок следования элементов?
Где стоит запятая? Казним или милуем? ;)
Ratings: 0 negative/0 positive
Re: Глава 1. Html
JS
Автор

Сообщений: 12264
Откуда: Эстония
Дата регистрации: 04.09.2000
Появился еще один вопрос связанный с DOM и с разной реализацией в mshtml.dll
Задал несколько вопросов команде, посмотрим, что они ответят.


------------------
Knowledge is better than ignorance!
Website: juri.foxhelp.eu
Ratings: 0 negative/0 positive
Re: Глава 1. Html
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Вообще-то, в XML (по хорошему) не должен учитываться порядок следования элементов. Данные должны различаться только по тегам и содержимому. "старый" html в принципе не является xml-совместимым форматом (уже одно допущение непарных тегов противоречит стандарту).
Я честно говоря не берусь сказать как ПРАВИЛЬНО парсер должен трактовать твой пример. Возможно даже что он может сцепить оба знака препинания в 1 элемент, т.к. они по-сути являются содержимым одного тега. А может он должен рапортовать о невалидной структуре...
Итог - наверное не совсем корректно будет разбирать html при помощи xml-парсера - т.е. ожидать, что парсер будет учитывать нечто выходящее за рамки стандарта xml...
Кстати, как я понимаю, создать при помощи DOM подобную html-ную структуру тоже невозможно.
P.S. С другой стороны есть ведь previousSibling, nextSibling - для навигации в рамках одного уровня...


------------------
WBR, Igor




Исправлено 1 раз(а). Последнее : Igor Korolyov, 13.04.09 18:00
Ratings: 0 negative/0 positive
Re: Глава 1. Html
has

Сообщений: 175
Откуда: Томск
Дата регистрации: 24.07.2004
Igor Korolyov
Я честно говоря не берусь сказать как ПРАВИЛЬНО парсер должен трактовать твой пример. ... А может он должен рапортовать о невалидной структуре...
Структура однозначно валидна. Так с чего бы парсеру так рапортовать?!
Igor Korolyov
наверное не совсем корректно будет разбирать html при помощи xml-парсера - т.е. ожидать, что парсер будет учитывать нечто выходящее за рамки стандарта xml...
А при чем тут XML? 8-/
Речь идет о DOM технологии, которая предназначена для работы не только с XML-хранилищами данных.
Igor Korolyov
С другой стороны есть ведь previousSibling, nextSibling - для навигации в рамках одного уровня...
В том-то и дело, что previousSibling и nextSibling осуществляют "навигацию в рамках одного уровня" некоторой коллекции.
А о составе коллекций и идет разговор.
А проверить не могу, т.к. у меня коллекция childNodes формируется не так как описано в книге.
Ratings: 0 negative/0 positive
Re: Глава 1. Html
JS
Автор

Сообщений: 12264
Откуда: Эстония
Дата регистрации: 04.09.2000
Igor Korolyov
Вообще-то, в XML (по хорошему) не должен учитываться порядок следования элементов. Данные должны различаться только по тегам и содержимому. "старый" html в принципе не является xml-совместимым форматом (уже одно допущение непарных тегов противоречит стандарту).

Игорь! Речь идет о html и парсингом занимается mshtml.dll. XML - парсингом занимаются
другие библиотеки msxmln.dll (n - номер версии)


------------------
Knowledge is better than ignorance!
Website: juri.foxhelp.eu
Ratings: 0 negative/0 positive
Re: Глава 1. Html
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Да, не учёл что тут html dom... Почитал малёхо - по стандарту каждый кусок текста в рамках тега является отдельным узлом особого типа "#text".
Даже попробовал нарисовать простенький скриптик - всё получилось в рамках стандарта, как я понимаю - и порядок на месте Надеюсь форум не поломается от всталенного html-я со скриптом
<html>
<head>
</head>
<body>
<p><b>Казнить </b><b> нельзя </b> , <b> помиловать</b>.</p>
<script type="text/javascript">
x=document.getElementsByTagName("p")[0].childNodes;
for (i=0;i<x.length;i++)
{
document.write(i);
document.write("&nbsp;");
if (x[i].nodeType == 1)
document.write(x[i].childNodes[0].nodeValue);
else
document.write(x[i].nodeValue);
document.write("<br />");
}
</script>
</body>
</html>


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Глава 1. Html
has

Сообщений: 175
Откуда: Томск
Дата регистрации: 24.07.2004
Igor Korolyov
Даже попробовал нарисовать простенький скриптик - всё получилось в рамках стандарта, как я понимаю - и порядок на месте
В том-то и дело, Игорь, что и у меня так получается! И как я понимаю, только так и должно быть.
Но вот в книге написано, что в коллекцию childNodes не должны попадать элементы-тэги (в данном случае - управление шрифтом). Их место в коллекции children.
В этом случае результат Вашего примера должен быть:
Казнить нельзя , помиловать.
0 ,
1 .
Это и обсуждаем.
Ratings: 0 negative/0 positive
Re: Глава 1. Html
JS
Автор

Сообщений: 12264
Откуда: Эстония
Дата регистрации: 04.09.2000
has
И как я понимаю, только так и должно быть.
Но вот в книге написано, что в коллекцию childNodes не должны попадать элементы-тэги (в данном случае - управление шрифтом). Их место в коллекции children.Это и обсуждаем.

Как я и говорил проблема в версиях mshtm.dll. Во время написания книги использовалась
старая версия mshtml.dll. Откатить нотбук уже невозможно.
В общем это старая история - коллекция childNodes в свое время не поддерживалась вообще
не поддерживалась IE, который использует эту библиотеку для парсинга документа
и выстраивания дерева.
Далее были введены исправления. И тоже было непонятно с исключением тэгов форматирования
текста из коллекции childNodes.
Поэтому верно следующее:
коллекция childNodes должна включать в себя все дочерние узлы, включая текстовые.
Однако текстовые узлы не должны попадать в коллекцию children.
Это справедливо для текущей версии mshtml.dll. Эта же версия включена
в Windows 7 и пример, приведенный в книге неверно отображает число дочерних узлов.

P.S. Что можно сказать в свое оправдание? Все что написано было создано
и проверено. Смена версий в машине произошла 12.07.2008, когда глава была
уже отправлена в редакцию.

Получил подтверждающий ответ от команды, а также ответ на еще один вопрос,
который уже будет прокомментирован на сайте книги с примерами.


------------------
Knowledge is better than ignorance!
Website: juri.foxhelp.eu




Исправлено 1 раз(а). Последнее : JS, 15.04.09 12:52
Ratings: 0 negative/0 positive
Re: Глава 1. Html
has

Сообщений: 175
Откуда: Томск
Дата регистрации: 24.07.2004
Юрий, спасибо!
Все понятно.
Один ма-а-а-ленький вопросик::-[ с какой версии mshtm.dll стал "новым"?
Он привязан к IE или Windows?
Ну чтоб сердце спокойно было...

Ну и заодно уже:
чем проверять успешность загрузки html-файла?
Ratings: 0 negative/0 positive
Re: Глава 1. Html
JS
Автор

Сообщений: 12264
Откуда: Эстония
Дата регистрации: 04.09.2000
has
Юрий, спасибо!
с какой версии mshtm.dll стал "новым"?
Он привязан к IE или Windows?
Ну чтоб сердце спокойно было...

Вообще-то это парсер IE и обновляться библиотека должна с ним.
Но выходит, что библиотека обновляется и вне
его обновлений, если судить по логам и по дате изменения самого файла.
Но кажется понял в чем проблема. Чуть позже выложу - сейчас это пишется
на Winodws 7.

Данные с нотбука, на котором писалась книга.
Дата создания каталога и перенос в него файлов примеров 4 апреля 2008

[attachment 7848 chapter1_1.jpg]

На этот момент была действующей версия 6.0.2900.2963 или ниже
после чего в середине апреля был установлен SP и версия сменилась
на 6.0.2900.5512.
Кроме того, в 42 модификациях файла было замечено
изменение, сделанное приложением FrontPage 2003 (только по датам файлов,
что может быть не совсем корректно).


[attachment 7849 chapter1_2.jpg]


"Собака порылась" в какой-то из версий до SP.

has
Ну и заодно уже: чем проверять успешность загрузки html-файла?
Если загрузка документа производится через InternetExplorer.Application,
то отслеживается readyState, если загружается в объект,
созданный через createobject("htmlfile"), то программа должна ждать завершения
записи файла в объект.


------------------
Knowledge is better than ignorance!
Website: juri.foxhelp.eu




Исправлено 2 раз(а). Последнее : JS, 15.04.09 19:57
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 1 (Гостей: 1)

© 2000-2024 Fox Club 
Яндекс.Метрика