for flooders
:: Главная :: Решения :: Статьи :: Сайт М. Дроздова :: Файловый архив :: Книга по VFP 9 :: Русский Help Online :: OFF-LINE Форум
   Л и с о в о д ы   в с е х   с т р а н,  о б ъ е д и н я й т е с ь !!!  

Список Форумов  :: Книга Юрия Шутенко
   :: Помощь сайту :: 

Глава 1. Html
JS
[MVP]
Автор

Сообщений: 11877
Откуда: Эстония
Дата: 07.06.08 16:01:04ОтветитьЦитировать
Сокращена насколько возможно


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




Исправлено: JS, 16.07.08 17:34
Ratings: 0 negative/0 positive

Re: Глава 1. Html
has

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

Re: Глава 1. Html
has

Сообщений: 175
Откуда: Томск
Дата: 06.04.09 12:30:13ОтветитьЦитировать
Обнаружил в этой главе ошибку.
Там где идет речь о различиях коллекций 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
[MVP]
Автор

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

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


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




Исправлено: JS, 06.04.09 16:57
Ratings: 0 negative/0 positive

Re: Глава 1. Html
has

Сообщений: 175
Откуда: Томск
Дата: 10.04.09 10:31:38ОтветитьЦитировать
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
Откуда: Ростов-на-Дону
Дата: 10.04.09 10:42:32ОтветитьЦитировать
has, установите себе MSDN. Там найдете много интересного


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

Re: Глава 1. Html
has

Сообщений: 175
Откуда: Томск
Дата: 10.04.09 13:02:55ОтветитьЦитировать
Влад Колосов
has, установите себе MSDN.
Похоже, что я чего-то сильно не понимаю.
MSDN - это ведь сайт подразделения Microsoft поддержки разработчиков.
Так как его можно "установить" ?
Я опять чего-то сильно не знаю?...
Ratings: 0 negative/0 positive

Re: Глава 1. Html
Igor Korolyov

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


------------------
WBR, Igor
Ratings: 0 negative/0 positive

Re: Глава 1. Html
has

Сообщений: 175
Откуда: Томск
Дата: 12.04.09 14:36:21ОтветитьЦитировать
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
[MVP]
Автор

Сообщений: 11877
Откуда: Эстония
Дата: 12.04.09 16:07:38ОтветитьЦитировать
Александр!
Все объясняется достаточно просто - разницей в версиях библиотеки 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
Откуда: Томск
Дата: 13.04.09 09:28:23ОтветитьЦитировать
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
[MVP]
Автор

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


------------------
Knowledge is better than ignorance!
Website: juri.foxhelp.eu
Ratings: 0 negative/0 positive

Re: Глава 1. Html
Igor Korolyov

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


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




Исправлено: Igor Korolyov, 13.04.09 17:00
Ratings: 0 negative/0 positive

Re: Глава 1. Html
has

Сообщений: 175
Откуда: Томск
Дата: 14.04.09 05:11:50ОтветитьЦитировать
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
[MVP]
Автор

Сообщений: 11877
Откуда: Эстония
Дата: 14.04.09 08:18:42ОтветитьЦитировать
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

Сообщений: 31833
Дата: 14.04.09 15:36:27ОтветитьЦитировать
Да, не учёл что тут 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
Откуда: Томск
Дата: 15.04.09 09:19:47ОтветитьЦитировать
Igor Korolyov
Даже попробовал нарисовать простенький скриптик - всё получилось в рамках стандарта, как я понимаю - и порядок на месте
В том-то и дело, Игорь, что и у меня так получается! И как я понимаю, только так и должно быть.
Но вот в книге написано, что в коллекцию childNodes не должны попадать элементы-тэги (в данном случае - управление шрифтом). Их место в коллекции children.
В этом случае результат Вашего примера должен быть:
Казнить нельзя , помиловать.  
  0 ,  
  1 .
Это и обсуждаем.
Ratings: 0 negative/0 positive

Re: Глава 1. Html
JS
[MVP]
Автор

Сообщений: 11877
Откуда: Эстония
Дата: 15.04.09 11:52:04ОтветитьЦитировать
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




Исправлено: JS, 15.04.09 11:52
Ratings: 0 negative/0 positive

Re: Глава 1. Html
has

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

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

Re: Глава 1. Html
JS
[MVP]
Автор

Сообщений: 11877
Откуда: Эстония
Дата: 15.04.09 18:15:24ОтветитьЦитировать
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




Исправлено: JS, 15.04.09 18:57
Ratings: 0 negative/0 positive





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

On-line: 60 and Guests: 60


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