C++. Сборник рецептов - [191]
Понимание примера 14.10 теперь не должно вызывать затруднений. Я начинаю с инициализации Xerces, как это делается в примере 14.8. Затем я получаю >DOMImplementation
из >DOMImplementationRegistry
, запрашивая функцию загрузки и сохранения путем передачи строки «>LS
» статическому методу >DOMImplementationRegistry::getDOMImplementation()
. На следующем шаге я получаю >DOMBuilder
из >DOMImplementation
. Мне приходится тип >DOMImplementation
привести к типу >DOMImplementationLS
, потому что функция загрузки и сохранения недоступна из интерфейса >DOMImplementation
согласно спецификации W3C DOM уровня 1. Первый аргумент >createDOMBuilder()
показывает, что возвращаемый парсер будет работать в синхронном режиме. Другой возможный режим, а именно асинхронный режим, в настоящее время не поддерживается в Xerces.
Получив >DOMBuilder
, я включаю поддержку пространства имен XML, регистрирую обработчик >ErrorHandler
и выполняю синтаксический анализ документа. Парсер возвращает документ в виде >DOMDocument
; используя метод >getElementsByTagName()
документа >DOMDocument
, я получаю объект >DOMElement
, соответствующий элементу этого документа >animalList
, и просматриваю его дочерние элементы, используя объект типа >DOMNodeList
. Когда я нахожу элемент, имеющий дочерний элемент типа >name
и содержащий текст «>Herby
», я удаляю его из документа с помощью вызова метода корневого элемента >removeChild()
.
>SAX2XMLReader
имеет метод >parse()
, принимающий экземпляр >InputSource
, >DOMBuilder
имеет метол >parse()
, принимающий экземпляр >xercesc::DOMInputSource
(т.е. экземпляр абстрактного класса, который инкапсулирует источник символьных данных). В >DOMInputSource
предусмотрен конкретный подкласс >Wrapper4DOMInputSource
, который может быть использован для преобразования произвольного >InputSource
в >xercesc::DOMInputSource
. См рецепт 14.3.
Наконец, я получаю объект >DOMWriter
из >DOMImplementation
(причем делаю это во многом точно так же, как при получении объекта >DOMBuilder
) и сохраняю модифицированный документ XML на диск, вызывая его метод >writeNode()
, передавая в качестве аргумента корневой элемент документа.
>DOMImplementation::createXXX()
, путем вызова метода >release()
. Используйте утилиту >DOMPtr
из примера 14.10 для того, чтобы гарантировать освобождение такого указателя, даже если выбрасывается исключение. Необязательно явно удалять указатели, возвращаемые методами, имена которых имеют вид >DOMDocument::createXXX()
, хотя это можно делать, если они больше не нужны. Дополнительные сведения вы найдете в документации Xerces.
14.5. Проверка документа XML на соответствие определению DTD
Требуется проверить документ XML на соответствие DTD.
Используйте библиотеку Xerces с парсером SAX2 (простой программный XML-интерфейс) или с парсером DOM.
Для проверки документа XML при использовании SAX2 получите >SAX2XMLReader
, как показано в примере 14.8. Затем включите режим проверки DTD, вызывая метод парсера >setFeature()
с аргументами >xercesc::XMLUni::fgSAX2CoreValidation
и >true
. Наконец, зарегистрируйте обработчик >ErrorHandler
для получения уведомлений о нарушении DTD и вызовите метод парсера >parse()
, указывая в качестве его аргумента имя вашего документа XML.
Для проверки документа XML при использовании парсера DOM сначала сконструируйте экземпляр >XercesDOMParser
. Затем включите режим проверки DTD, вызывая метод парсера >setValidationScheme()
с аргументом >xercesc::XercesDOMParser::Val_Always
. Наконец, зарегистрируйте обработчик >ErrorHandler
для получения уведомлений о нарушении DTD и вызовите метод парсера >parse()
, указывая в качестве его аргумента имя вашего документа XML.
>XercesDOMParser
, т.е. XML-парсер, который входил в состав Xerces еще до того, как был разработан интерфейс >DOMBuilder
— парсера DOM уровня 3. Применение >XercesDOMParser
позволяет немного упростить пример, но при желании вы можете вместо него использовать >DOMBuilder
. См. обсуждение этого рецепта и рецепт 14.4.Для примера предположим, что вы модифицируете документ XML animals.xml из примера 14.1 для того, чтобы он содержал ссылку на внешнее определение DTD, как показано в примерах 14.11 и 14.12. Программный код, выполняющий проверку документа с использованием программного интерфейса SAX2, приводится в примере 14.13; программный код, выполняющий проверку этого документа с использованием парсера DOM, приводится в примере 14.14.
Пример 14.11. DTD animals.dtd для файла animals.xml
>
>
>
> veterinarian, trainer) >
>
>
>
>
Разработчику часто требуется много сторонних инструментов, чтобы создавать и поддерживать проект. Система Git — один из таких инструментов и используется для контроля промежуточных версий вашего приложения, позволяя вам исправлять ошибки, откатывать к старой версии, разрабатывать проект в команде и сливать его потом. В книге вы узнаете об основах работы с Git: установка, ключевые команды, gitHub и многое другое.В книге рассматриваются следующие темы:основы Git;ветвление в Git;Git на сервере;распределённый Git;GitHub;инструменты Git;настройка Git;Git и другие системы контроля версий.
Рассмотрено все необходимое для разработки, компиляции, отладки и запуска приложений Java. Изложены практические приемы использования как традиционных, так и новейших конструкций объектно-ориентированного языка Java, графической библиотеки классов Swing, расширенной библиотеки Java 2D, работа со звуком, печать, способы русификации программ. Приведено полное описание нововведений Java SE 7: двоичная запись чисел, строковые варианты разветвлений, "ромбовидный оператор", NIO2, новые средства многопоточности и др.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
Python - объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.