Ошибка при создании ком-объекта msxml2 domdocument linux

Обновлено: 04.07.2024

// то же, что и pq('anything')->htmlOuter()
//, но в корне документа (возвращает тип документа и т. д.)
print phpQuery :: getDocument ();
?>

Он использует расширение DOM и XPath, поэтому работает только в PHP5.

Я ненавижу модель DOM!
поэтому я написал простую функцию dom2array (простую в использовании):

функция dom2array($node) $res = array();
print $node->nodeType.'
';
if($node->nodeType == XML_TEXT_NODE) ​​$res = $node->nodeValue;
>
else if($node->hasAttributes()) $attributes = $node->attributes;
if(!is_null($attributes)) $res['@attributes'] = array();
foreach ($attributes as $index=>$attr) $res['@attributes'][$attr->name] = $attr->value;
>
>
>
if($node->hasChildNodes()) $children = $node->childNodes;
for($i=0;$i length;$i++) $child = $children->item($i);
$res[$child->nodeName] = dom2array($child);
>
>
>
возврат $res;
>

Некоторые ключевые примеры:
* краткий обзор иерархии классов (1.1.1)
* пояснение, что уровень DOM 2 не позволяет заполнять внутренние DTD
* объяснение DOMNode ->normalize()
* объяснение класса реализации DOMI

Интерфейсы описаны на языке определения интерфейса OMG

Начиная с PHP 5.1, параметры libxml можно задавать с помощью констант, а не с помощью проприетарных свойств DomDocument.

DomDocument->resolveExternals эквивалентен настройке
LIBXML_DTDLOAD
LIBXML_DTDATTR

DomDocument->validateOnParse эквивалентен настройке
LIBXML_DTDLOAD
LIBXML_DTDVALID

Пользователям PHP 5.1 рекомендуется использовать новые константы.

Проект, над которым я сейчас работаю, использует XPath для динамической навигации по фрагментам XML-файла. Я не смог найти в сети никакого PHP-кода, который строил бы для меня XPath к узлу, поэтому я написал свою собственную функцию. Как оказалось, это было не так сложно, как я думал (ура, рекурсия), хотя это требует использования некоторых махинаций с PHP.

Надеюсь, это избавит кого-то от необходимости заново изобретать колесо.

function getNodeXPath ( $node ) // ПОМНИТЕ, ЧТО XPATH ИСПОЛЬЗУЕТ BASE-1 ВМЕСТО BASE-0.

// Получаем индекс текущего узла, перебирая братьев и сестер.
$parentNode = $node -> parentNode ;
if( $parentNode != null ) $nodeIndex = 0 ;
do $testNode = $parentNode -> childNodes -> item ( $nodeIndex );
$nodeName = $testNode -> nodeName ;
$nodeIndex++;

// Обман PHP! Здесь мы создаем счетчик на основе узла
// имя тестового узла для использования в XPath.
если( !isset( $$имя_узла )) $$имя_узла = 1 ;
иначе $$имя_узла++;

// Отказоустойчивое возвращаемое значение.
if( $nodeIndex > $parentNode -> childNodes -> length ) return( "/" );
> while( ! $node -> isSameNode ($testNode));

// Рекурсивно получаем XPath для родителя.
return( getNodeXPath ( $parentNode ). "/ < $node ->nodeName > [ ]" );
> else // Попадание в корневой узел! Обратите внимание, что косая черта добавляется при
// построении XPath, поэтому мы возвращаем только пустую строку.
возврат("");
>
>
?>

Если вы используете не объектно-ориентированные функции и на их изменение уходит слишком много времени (или вы будете заменять их позже), то как временное решение можно использовать эти модули:

Когда я пытаюсь создать проект с помощью VBScript CreateObject("msxml.) DOMDocument'), отображается ошибка: 429, компонент ActiveX не может создать объект.

Сообщество Microsoft Answers уделяет особое внимание контексту использования. Обратитесь к профессиональному сообществу COMPUTING на форуме MSDN по ссылке ниже:

Похожие вопросы

У нас есть программа VB6, работающая на компьютере в нашем офисе, работающем под управлением Windows XP Professional. Он работал еще несколько дней назад, но теперь мы получаем ошибку:

Ошибка выполнения 429 — компонент ActiveX не может создать объект

У нас недавно возникла проблема с программой VBA, вызванная обновлением системы безопасности Microsoft (KB960715), и мне интересно, может ли быть причиной похожая проблема? Пожалуйста, дайте мне знать, если вам нужна дополнительная информация.

Большое спасибо
Крис

Привет, Крис Заика,

Спасибо за публикацию на форуме ответов Microsoft.

Если проблема была вызвана обновлением Windows, я попытаюсь проверить, сможете ли вы восстановить систему и вернуться до того, как обновление будет применено к вашей системе. Щелкните номер статьи базы знаний и следуйте инструкциям в базе знаний.

Надеюсь, это поможет.

Мэрилин
Инженер службы поддержки Microsoft Answers
Посетите наш форум обратной связи Microsoft Answers и дайте нам знать, что вы думаете

После установки Windows 7 я получаю это сообщение об ошибке каждый раз при запуске Word (Office 2007)

Благодарим вас за использование форумов Microsoft Answers.

Для получения дополнительной информации перейдите по ссылкам ниже:

Надеюсь, эта информация окажется полезной.

Спасибо, а в том, что касается:
Umesh P – Служба поддержки Microsoft

Привет всем
Один из моих пользователей получает следующую ошибку при экспорте файла сопоставления в Excel, что он мог делать раньше. Я предполагаю, что это не должно быть связано с записью адаптера, которую пользователь взял перед экспортом.

* Начать запись в журнале об ошибке выполнения FDM [2012-01-24-14: 21:33] *.

--------------------------------- ------------------
ОШИБКА:
Код. 429
Описание. Компонент ActiveX не может создать объект
Process. clsUtility.mRecordsetToExcel
Компонент. upsWDataWindowDM
Версия. 1111
Резьба. 15876

ИДЕНТИФИКАЦИЯ:
Пользователь. xxxxx
Имя компьютера. xxxxx
Название приложения. FDMAPP
Клиентское приложение. Веб-клиент

СОЕДИНЕНИЕ:
Поставщик. SQLOLEDB
. Сервер базы данных xxxxx
Имя базы данных. hyp_fdm
Надежное соединение. Поддельный
статус подключения. Открыть соединение

ГЛОБАЛЬНЫЕ:
Местоположение. HFM
Идентификатор местоположения. 769
Местоположение Сегмент. 23
Категория. Реальный
ID категории. 13
Период. Декабрь - 2010 г.
Идентификатор периода. 12.31.2010
Местное видео от первого лица. Поддельный
язык. 1033
Уровень пользователя. 1
Все разделы. True
Аудитор. Подделка

* Начать запись в журнале об ошибке выполнения FDM [2012-01-24-14: 21:52] *.

--------------------------------- ------------------
ОШИБКА:
Код. 429
Описание. Компонент ActiveX не может создать объект
Process. clsUtility.mRecordsetToExcel
Компонент. upsWDataWindowDM
Версия. 1111
Резьба. 14044

ИДЕНТИФИКАЦИЯ:
Пользователь. xxxxxx
Имя компьютера. xxxxxx
Имя приложения. FDMAPP
Клиентское приложение. Веб-клиент

СОЕДИНЕНИЕ:
Поставщик. SQLOLEDB
Данные сервера. xxxxxx
Имя базы данных. hyp_fdm
Надежное соединение. Поддельный
статус подключения. Открыть соединение

ГЛОБАЛЬНЫЕ:
Местоположение. HFM
Идентификатор местоположения. 769
Местоположение Сегмент. 23
Категория. Реальный
ID категории. 13
Период. Декабрь - 2010 г.
Идентификатор периода. 12.31.2010
Местное видео от первого лица. Поддельный
язык. 1033
Уровень пользователя. 1
Все разделы. True
Аудитор. Подделка

Вероятно, объект DCOM не может создать файл; На сервере должен быть установлен MS Excel/Office 2007.

Когда я запускаю это задание, я получаю сообщение об ошибке: компонент ActiveX не может создать объект.

Я попытался распечатать источник ошибки (от Err.Source, и он выдает "Ошибка времени выполнения Microsoft VBScript").

Любая помощь будет оценена по достоинству. Дайте мне знать, если я смогу извлечь дополнительную информацию.

Заранее спасибо.
Я

Вопрос, который вы разместили здесь, связан с Visual Basic и лучше подходит для обсуждения на форуме MSDN. Я предлагаю вам разместить свой вопрос по следующей ссылке.

У нас есть 1 компьютер на работе, который не может отображать сообщения электронной почты в Microsoft Navision версии 5.0. Все остальные работают нормально и настроены одинаково.

Случайно исправлено. Я установил Adobe Acrobat Writer по другой причине, и когда я попробовал Navision, он работал нормально. Не уверен, как и почему он устанавливается, но он установил.

Здравствуйте, я надеюсь, что кто-то может помочь. Я использую Windows 7 64-бит. на высокопроизводительном ПК. Когда вы запускаете FS2004 (программа Flight Sim), я получаю сообщение об ошибке "" ошибка времени выполнения "429": компонент ActiveX не может создать объект "." Похоже, это связано с полетом или Компьютерная программа управления CMF. Эта ошибка блокирует доступ к CMF. Я попытался загрузить последний драйвер ATI, но это только усугубило ситуацию. Кто-нибудь сталкивался с этой проблемой раньше? Надеюсь

Заранее спасибо

Возможно, в будущем у кого-то еще будет такая же проблема с 64-битной Вистой, где игра, они также могли бы попробовать это «исправление». Конечно, мне это помогло!

Большое спасибо за вашу помощь и проблемы передо мной, это ценно.

Здравствуйте
на 10g bR2 на компьютере с Windows мой rman сбой резервного копирования на подключенном диске со следующим сообщением об ошибке:
ORA-19504: невозможно создать файл при использовании rman

Что вы мне предлагаете?

Я слышал, что RMAN не может писать в отображаемую файловую систему. Это правда? Некоторые люди предложили:

OracleService должен запускаться пользователем ОС с разрешениями

Но что за служба оракула? Целевая база данных или база данных каталога RMAN?

Вы должны изменить свою среду в металинке:

Как настроить RMAN для записи о средствах чтения, совместно используемых в Windows NT/2000
DOC — ID: Примечание: 145843.1

Я получаю следующую ошибку:
Ошибка: Компонент ActiveX не может создать объект: 'fdmFM11xG5C.clsFMAdapter'.
В сети: 45

При попытке сопоставить целевой аккаунт FM

Я использовал следующий адаптер для записи fdmFM11xG5C.
Я записал адаптер, используя данную документацию, но все не так.

HFM и FDM установлены на двух разных компьютерах.

Я также ранее разговаривал с форумчанами, у которых была такая же проблема.

Пожалуйста, дайте мне знать, что здесь делать.

Опубликовал: user12276446, 27 июня 2010 г., 23:52

Если компонент ActiveX не может создать объект fdmFM11xG5C.clsFMAdapter исчез, адаптер успешно зарегистрирован и настроен. Сообщение об ошибке:

Ошибка: сервер/кластер настроен правильно. Измените конфигурацию сервера подключения или кластера.
Сервер/кластер настроен правильно. Измените конфигурацию сервера подключения или кластера.
Справочный номер ошибки:

Возврат из HFM, в котором говорится, что не существует такого понятия, как значение, которое передается клиенту HFM в качестве имени кластера. В профиле машины FDM сервера приложений значение целевой машины должно быть именем кластера HFM, которое хранится в клиенте Win32 HFM на сервере приложений в FDM. Вы можете найти его, выполнив следующие действия:

(a) запустить клиент HFM Win32 на сервере приложений в FDM
(b) соединение с
(c) выбрать "открыть приложение".

Возвратится экран выбора кластера. Это значение необходимо заполнить на компьютере целевого компьютера профиля сервера приложений FDM.

У меня есть папка Tax, но каждый раз, когда я пытаюсь ее открыть, ошибка выполнения 429 ActiveX не может создать. только пока она не сделала 3 раза и не попробовала все предложения для правильного. помогите!

Наконец я связался с Vernisoft. подписался на них поверх предыдущей проблемы, когда меня взломали, и они, наконец, исправили ее. через 3 часа. Короче говоря, они, наконец, установили IE8, и уведомление об ошибке во время выполнения исчезло, и я смог записать и передать свою запись. Никаких проблем с тех пор.

Мой Dell Inspiron 1545 выдает это сообщение и никуда не уходит

Есть предложения по решению этой проблемы? Спасибо

Если все те, кто не может работать, (они не для меня). У меня есть Win7 Pro с Toshiba Satalite, и через несколько недель я медленно злюсь и злюсь. Я сделал.

Зашел на веб-сайт toshiba и обновил драйверы BIOS.

установлены (все автоматически)

Вот ссылка на ваш обновленный BIOS

Надеюсь, это сработает.

Привет всем
Одновременное применение ошибки Bellow

Мы используем ORACLE 10 г. R12
ОС: RHEL 4.4 (LINUX)

Авторское право (c) 1979, 1999, корпорация Oracle. Все права защищены.

Текущее системное время: 27 января 2013 г., 09:58:58

* Начало * 27 января 2013 г., 09:58:58
Ошибка ORACLE 20100 в FDPSTP

Конец автозаполнения параметров запроса.

Эта проблема связана с Oracle EBS, отметьте ее как ответ и откройте ее

E-Business Suite для дискуссионных форумов Oracle

У нас есть приложение (App1), написанное на VB5. Когда приложение App1 установлено, оно загружает и записывает несколько пользовательских DLL в каталог c:\program files\app1. Эта программа отлично работает в Win7.
Мы создали специальное приложение для одного клиента (App2). App2 использует DLL, которую записывает App1 (ddl1.dll). App2 работает нормально до тех пор, пока он не попытается создать экземпляр одной из подпрограмм dll1.dll. В этот момент выдает ошибку 429. App2 отлично работает на Win98 - XP. Он не работает на Win7 и обнаружил, что он не работает и на Vista.
Я попробовал regsvr32 "c:\program files\app1\dll1.dll", но этого недостаточно.

Да - это то, что я могу сделать или мне нужно знать о Win7.

Ваш вопрос о Windows 7 более сложен, чем те, на которые обычно отвечают на форумах Microsoft Answers. Он лучше подходит для широкой публики Microsoft в сети разработчиков MSDN. Разместите свой вопрос на форуме Microsoft Development Network — категория Visual Basic.

Спасибо, а по поводу:
Shekhar S - техническая поддержка Microsoft.

Посетите форум отзывов об ответах Майкрософт и дайте нам знать, что вы думаете.
Если это сообщение может помочь решить вашу проблему, нажмите "Пометить как ответ" или "Полезно" в верхней части этого сообщения. Отметив сообщение как ответ или относительно полезное, вы поможете другим быстрее найти ответ.

Вчера я обновил свою тестовую среду ESXi 5.5 до версии 6.0, и теперь у меня возникла проблема, заключающаяся в том, что мое программное обеспечение для резервного копирования не может создать моментальный снимок. Итак, я проверил, и то же самое через VCenter не может создать снимок состояния покоя. Я получил это сообщение об ошибке:

Снимки Fehler beim Speichern: msg.snapshot.error - QUIESCINGERROR.

В vmware.log я прочитал много ошибок, вот некоторые из них:

Не удалось открыть отслеживание изменений файла "/vmfs/volumes/54aea31d-61d81d56-35f9-000423ba9740/srv01-Domaincontroller/srv01-Domaincontroller-000002 - ctk.vmdk": недопустимое последующее изменение или используемый диск.

Сбой создания cbt узла 19095c-cbt из-за ошибки не удается выделить память (0xbad0014, не хватает памяти).

Не удалось настроить средство отслеживания изменений vmkernel: сбой мониторинга фильтра ESXi (0x143c). Диск будет открыт, но последующие изменения информации будут аннулированы.

Не удалось восстановить доступный для записи моментальный снимок подписи диска "scsi0:1".

Ошибка моментального снимка 62: невозможно приостановить виртуальную машину (31).

Когда я останавливаю виртуальную машину, удаляю файлы ctk и изменяю конфигурацию виртуальной машины для:

ctkEnabled = true (или false)

scsi0:1.ctkEnabled = false
scsi0:2.ctkEnabled = false

Тогда я могу сделать мгновенный спад. Значение false для scsi0:x важно. Когда я переключаюсь обратно, я не могу снова сделать мгновенный спад.

Это относится к следующей ОС:

Windows Server 2008 R2

Windows Server 2012

R2 Windows Server 2012

Я также могу сделать моментальный снимок замедления на виртуальном компьютере с Windows 8.1 без проблем и на виртуальной машине Linux.

Я уже создал кейс на VMware, но защитник немного поискал, дал мне наводку, что не работает и сказал, что больше ничего делать не может, т.к. моя плата Supermicro не входит в поддерживаемую список.

Я этого не понимаю, мы являемся партнером Enterprice of VMware, я хочу протестировать новую версию в своей тестовой среде, прежде чем устанавливать ее на клиенте. Теперь у меня возникла проблема, и кажется, что VMware мне не поможет, потому что материнская плата не поддерживается! Но для меня это не аппаратная проблема.

Возможно, у кого-то есть такая же проблема, или он может проверить, что происходит, когда вы включаете cbt для виртуальной машины.

Затем я начинаю видеть иллюстратора и делаю свой сценарий. Этот код скрипта запущен и работает.

Но всякий раз, когда я пытаюсь создать экземпляр Illustrator с помощью:

AIappli — это новый Illustrator. Приложение

AIappli = CreateObject ("" Illustrator.Application"" )

AIappli = CreateObject ("" Illustrator.Application.CS5"" )

AIappli = CreateObject ("" Illustrator.Application.CS6"" )

Я получаю случайные ошибки, такие как "Не удалось создать компонент axtivex" или тайм-аут/сбой/нет доступных ошибок сервера.

Это происходит очень случайно, поэтому иногда приведенный выше код работает, а иногда нет "!"

Установка, над которой мы работаем, представляет собой комбинацию улучшений CS5 и CS6.

Когда я проверил HKCR\CSID для поиска progid, я обнаружил следующее:

a. jpg

Значит, я не понимаю, что я здесь делаю не так?

Любая помощь в этом?

попробуйте так

Возможно, вы ищете

<р>? Пытаюсь помочь посту, вот он в затруднительном положении, и я пытаюсь по пути наименьшего сопротивления вылечить его недуги. Каждый год Intel iMac и модели могут загружать внешний жесткий диск USB? Вот сообщение для любознательных. Это в реале

Пожалуйста, мне нужен беспроводной драйвер для моего нового ноутбука HP Laptop - 15-r204ne для Windows 7 (32-разрядная) и (64-разрядная)

Имеется 4 слота DIMM. 1 и 3 синие, 2 и 4 зеленые. Какие два я должен использовать для установки флешек 2x2gb? Спасибо

Не удается загрузить драйвер BIOS для моего compaq presario cq50-112eo. Страна Швеция

Я только что переключился с 8310 на 8900, а затем понизил ОС до версии 5.0.0.411, потому что моя кнопка режима ожидания не работала. Случилось так, что я полностью потерял блокнот. и я пробовал все, что упоминалось кем-либо на разных сайтах. Я попробовал приложение


Дата присоединения к новому участнику, июнь 2014 г. Сообщений 4

[VB6] Недостаточно памяти в объекте MSXML2.DOMDocument

Я использую объект MSXML2.DOMDocument в своем приложении VB6 для построения XML. Я получаю данные из базы данных, создаю узел и назначаю его объекту DOMDocument. В этом сценарии у меня есть 1 50 000 записей, до 52 000 записей Объект DOMDocument не показывает никаких ошибок. При дальнейшей обработке объект DOMDocument показывает "Недостаточно памяти".


Я пытался использовать объекты MSXML4.DOMDocument, MSXML5.DOMDocument и MSXML6.DOMDocument, но проблема осталась.

Пожалуйста, помогите мне решить эту проблему.

Дата присоединения к Frenzied: май 2014 г. Место: Центральная Европа Сообщений: 1 338

сколько у вас записей? я не могу понять это утверждение.

Похоже, вы пытаетесь создать огромный xml-файл. Скорее всего, это не очень хорошая идея, поскольку даже у MSXML4-6 может возникнуть проблема с таким большим файлом, как и у некоторых других реализаций xml. Я обнаружил, что файлы xml размером более 50 МБ становятся громоздкими.


Дата присоединения к новому участнику, июнь 2014 г. Сообщений 4

У меня 1 50 000 записей.


Дата присоединения к новому участнику, июнь 2014 г. Сообщений 4

У меня 1 50 000 записей.

Присоединиться к PowerPoster, февраль 2012 г. Местоположение: Западная Вирджиния Сообщений: 13 978

Первоначальное сообщение от spmohanraj

Спасибо за ответ.

У меня 1 50 000 записей.

Так ты хочешь сказать, что у тебя 150 тысяч записей? Или 1,5 миллиона записей

1,50,000 не является допустимым представлением числа. три цифры находятся между , s Таким образом, это либо 1 500 000, либо 150 000, а не 1 50 000

Присоединение к PowerPoster, февраль 2006 г. Сообщений: 23 133

Первоначальное сообщение от DataMiser

Так ты хочешь сказать, что у тебя 150 тысяч записей? Или 1,5 миллиона записей

1,50,000 не является допустимым представлением числа. три цифры находятся между , s Так что это либо 1 500 000, либо 150 000, а не 1 50 000

Я предполагаю, что это восточноазиатский язык за сто пятьдесят тысяч.


Первое, что нужно учитывать, это то, что модели XML DOM предназначены для создания сценариев для очень легких приложений. Они могут очень быстро стать огромными, и каждый узел и атрибут несут в себе огромный объем багажа, который потребляет большое количество оперативной памяти и приводит к значительному снижению производительности.

Когда вам приходится работать с очень большими XML-документами (чего следует по возможности избегать, но иногда у вас нет выбора), вам нужно рассмотреть другие способы работы с ними.

Один из подходов заключается в создании самодельного кода для решения всех аспектов ситуации с использованием низкоуровневого файлового ввода-вывода и обработки строк для анализа или создания XML. Чтобы избежать этого, существует другой часто используемый API поддержки XML: SAX.

Библиотеки MSXML предоставляют реализацию SAX, которую вполне можно использовать в программах VB6. Исходного MSXML.SAX уже давно нет, но MSXML.SAX2 вполне стабилен.


Вот очень простая демонстрация, показывающая, как можно использовать SAX2 для создания очень большого XML-документа на основе результатов запроса к базе данных. В этом случае мы просто получим все столбцы всех строк таблицы SALES в Jet MDB.

Проще говоря, объектная модель документа — это способ просмотра дерева XML-данных и группы API для чтения и управления ими. Эти API распространены среди DOM-совместимых приложений, поэтому то, что работает в одной среде, должно работать и в другой.

Ваше программное обеспечение определяет доступную вам версию DOM. На момент написания этой статьи большинство реализаций (но не все) находились на уровне 2.0 с некоторой поддержкой уровня 3.0. В большинстве случаев вы будете использовать основной модуль, но бывают ситуации, когда каждый из других модулей будет полезен.

В этой главе представлен обзор всех рекомендаций, и основное внимание уделяется ядру DOM уровня 2.0. В главе 4 "Расширенные методы DOM" и главе 13 "XML в браузере: XHTML" мы рассмотрим некоторые другие модули.

Что такое объектная модель документа?

Объектная модель документа на самом деле возникла из браузеров, создающих сценарии HTML-страниц. Раньше, когда этот тип сценариев (теперь известный как DHTML или Dynamic HTML) был новым, каждый браузер реализовывал его по-своему. Например, думать о форме как об объекте было довольно очевидным выбором, но как бы вы представили значение ввода формы с именем username? Будет ли это одно из следующих?

Список не был бесконечным, и некоторые из этих вариантов были функционально эквивалентны, но было достаточно различий в том, что поддерживалось между разными браузерами (и даже версиями одного и того же браузера), чтобы стать кошмаром для веб-разработчиков, которым нужно было чтобы убедиться, что их страницы работают везде, где доступны сценарии.

Результатом стала разработка объектной модели документа — (своего рода) стандартного взгляда на HTML. Эта неофициальная версия, основанная на браузерах версии 3.x, известна как DOM Level 0.

В первой официальной версии, DOM Level 1.0, была создана базовая структура узлов, элементов и атрибутов, которая позволяла перемещаться по документу. Однако с самого начала все знали, что это всего лишь отправная точка, и с тех пор DOM Level 2.0, который включает в себя больше функций, был (в основном) одобрен, а DOM Level 3.0, который делает шаг вперед, находится в разработке. работы.

Как я уже говорил, во всех этих рекомендациях легко запутаться. Начнем с основной рекомендации.

Набор интерфейсов

В некотором смысле неверно утверждать, что объектная модель документа определяет набор объектов. Собственно, он определяет набор интерфейсов к объектам. Интерфейс представляет собой набор следующих элементов:

Свойства или данные, которые содержит объект

Методы или действия, которые может выполнять объект

Параметры, которые можно передать объекту или методу

Тип объекта, который возвращает метод, если он есть

Программист может реализовать эти интерфейсы, создав соответствующие им объекты. Таким образом, когда другой программист захочет использовать эти объекты, он или она будет знать, как это сделать, потому что они основаны на этих четко определенных интерфейсах.

Например, основная рекомендация DOM определяет интерфейс с именем Element и метод с именем getAttribute(). Интерфейс указывает, что когда метод getAttribute() вызывается с именем атрибута, он должен возвращать значение атрибута. Это означает, что если я создам объект на основе этого интерфейса Element, вы можете безопасно использовать его, зная, что если вам нужно значение атрибута, вы можете использовать getAttribute()< /tt> метод.

Поскольку интерфейсы стандартны, сама реализация не так важна. Все, что вам нужно, это то, что если вы вызовете getAttribute("month") для элемента birthday, вы получите значение month атрибут. Эта переносимость является целью объектной модели документа.

Важность узлов

Если разобраться, вся модель DOM основана на узле. Документы, элементы, атрибуты, текст и даже инструкции по обработке и комментарии — все это особые случаи интерфейса Node.

Например, XML-документ

фактически представляет как минимум 8 узлов разных типов:

один узел документа

два узла элемента (друг и дескриптор)

четыре текстовых узла (close, Harold и перевод строки до и после элемента name)

один узел атрибута (степень)

Эти узлы расположены в отношениях родитель-потомок, как показано на рис. 3.1.

Рисунок 3.1 Отношения родитель-потомок простого документа.

Обратите внимание, что элементы и текст, который они содержат, являются отдельными узлами; узел элемента действует как родитель, а текстовый узел — как дочерний элемент, как показано стрелками. Обратите также внимание на то, что узел атрибута не является дочерним элементом узла элемента.

Объектная модель документа определяет 12 различных типов узлов, каждый из которых реализует интерфейс Node и каждый из которых добавляет собственные методы.

Например, интерфейс Node определяет метод getNodeValue(), так как он применим к большинству типов узлов. С другой стороны, метод getTarget() применяется только к инструкциям по обработке и как таковой является частью интерфейса ProcessingInstruction.

Объектная модель документа определяет следующие интерфейсы:

Узел — общий тип, применимый ко всему. Интерфейс Node включает методы для получения информации об Node, такие как getParentNode() и getNodeName(), и для управления структурой документа или отдельного узла, например, insertBefore() и removeChild(). Он также определяет числовые значения для каждого типа узла, что позволяет определить, с каким типом узла вы имеете дело, даже если сам тип объекта — Узел.

Документузел, который порождает почти все другие типы узлов. В то время как интерфейс Node содержит методы, которые используются для перемещения узлов, интерфейс Document содержит методы, которые используются для их фактического создания, такие как createElement( ) и createTextNode().

Элемент — тип узла, который может быть связан с узлами Attr. Этот интерфейс содержит удобные методы, такие как getElementsByTagName().

Attr: этот узел, имя которого является сокращением от attribute, может иметь в качестве дочерних узлов Text или EntityReference.

Текст – это строка без разметки. Это означает, что текстовый узел со смешанным содержимым разбивается на отдельные узлы Text и Element.

CDATASection – этот тип узла "скрывает" разметку. В отличие от узла Text, разметка внутри значения не приведет к созданию отдельного узла Element.

DocumentType — этот тип узла содержит всю информацию, которая обычно содержится во внутреннем подмножестве DTD в виде строкового значения. Он также содержит имя указанного корневого элемента и любые системные или общедоступные идентификаторы, указывающие на внешние подмножества DTD.

Comment, Notation, Entity, EntityReference и ProcessingInstruction — эти узлы просто моделируют своих однофамильцев, предоставляя соответствующую информацию о себе.

Мы подробно рассмотрим сущности, ссылки на сущности и нотации в Главе 7, "Определения типов документов (DTD)".

Некоторые интерфейсы DOM не соответствуют фактическим типам узлов в документе, но они предназначены для облегчения вашей работы при работе с документами:

DocumentFragment: эта реализация интерфейса Node вообще не имеет собственных методов, а действует как своего рода мини-документ или контейнер. для других групп узлов вы можете перемещаться.Например, если вы вставляете DocumentFragment в документ, фактически вставляются только дочерние узлы.

DOMImplementation – этот интерфейс позволяет определить, поддерживаются ли определенные действия с помощью метода hasFeature(). Он также позволяет создавать Document и DocumentType.

DOMException и ExceptionCode – эти интерфейсы позволяют приложению сообщать вам, что что-то пошло не так, и что это такое.

NodeList и NamedNodeMap — эти два служебных интерфейса необходимы для фактической работы с документом DOM, как вы увидите, когда мы начнем создавать приложение. NodeList предоставляет упорядоченный список результатов, таких как дочерние элементы узла, а NamedNodeMap предоставляет неупорядоченный список, доступный по имени, например атрибуты элемента. .

Различные рекомендации

Все эти интерфейсы являются частью рекомендации DOM уровня 1.0. В уровне 1.0 были внесены незначительные изменения для создания основной рекомендации DOM уровня 2.0.

DOM уровня 2.0 включает пять других рекомендаций по модулям, каждый из которых имеет определенную цель:

DOM Level 2.0 Traversal and Range — этот модуль включает два новых интерфейса, NodeIterator и TreeWalker, которые предоставляют альтернативные средства навигации по документу. Он также определяет средства для ссылки на конкретную часть документа. (Мы поговорим о диапазонах в Главе 14, "Язык компоновки XML (XLink)".

DOM Level 2.0 HTML — этот модуль включает специализированные версии определений из Основной рекомендации, такие как HTMLDocument и HTMLFormElement. Эти интерфейсы чаще всего реализуются в браузере, где HTML-страницей управляет JavaScript или другой клиентский сценарий.

Таблицы стилей DOM уровня 2.0. Этот модуль определяет интерфейсы, которые работают с каскадными таблицами стилей и содержащимися в них данными.

Представления DOM уровня 2.0. Этот модуль позволяет различать разные версии документа. Например, каскадная таблица стилей может изменять данные в документе, создавая другое представление. (На момент написания этой статьи этот модуль был удален из DOM Level 3.0.)

События DOM уровня 2.0. Этот модуль основан на работе над сценариями браузера и позволяет определять поведение объектов, когда какое-либо действие, например щелчок мышью, влияет на них, их предков или потомков.

DOM Level 3.0, который на момент написания этой статьи все еще находился в стадии рабочего проекта, включает пересмотренные версии модулей Core и Events, а также два новых модуля:

Загрузка и сохранение DOM уровня 3.0 – этот модуль пытается подробно описать загрузку и сохранение документов (что, начиная с уровня 2.0, остается на усмотрение отдельных разработчиков).

Проверка DOM уровня 3.0. Этот модуль позволяет проверить существующий объект Document на соответствие определенной связанной грамматике и потребовать, чтобы он оставался действительным на протяжении всего своего существования.

DOM Level 3.0 XPath — этот модуль обеспечивает большую гибкость в использовании выражений XPath для поиска и указания узлов в документе. Это не обновление XPath, а способ использования XPath 1.0 с документом DOM.

Определение поддержки

Итак, со всеми этими различными версиями, реализациями и модулями, как узнать, доступен ли конкретный метод или интерфейс для вашего приложения?

Ответ кроется в интерфейсе DOMImplementation и его методе hasFeature(). Каждый из этих модулей имеет стандартное имя и версию, поэтому, чтобы определить, доступен ли интерфейс TreeWalker, можно проверить следующее значение:

Мы увидим пример этого в следующем разделе, когда фактически создадим документ DOM для работы.

Читайте также: