Слайд 3Модели документов
Ниже перечислены три модели документа:
Линейная (Linear) модель
Древовидная (Tree) модель
Объектная
(Object) модель
В линейной модели документа файл считывается последовательно, символ за
символом, строка за строкой
В древовидной модели файл считывается от корня к ветвям, затем к другим подветвям
В объектной модели каждая часть файла рассматривается, как объект
Слайд 7Создание объекта XML Document
Синтаксис, используемый для создания документов XML:
Dim xmlDoc
Set
xmlDoc=CreateObject(“Microsoft.XMLDOM”)
Документ XML будет загружен, как объект document, если он является
правильно сформированным
Синтаксический анализатор MSXML загружает документ XML только в том случае, если он правильно сформирован и проверен на соответствие DTD, если последний имеется
Слайд 8Пример проверки документа
Dim xmlDoc
Set xmlDoc = CreateObject("microsoft.xmlDOM")
xmlDoc.async = False
xmlDoc.load("sample1.xml")
If xmlDoc.parseError.errorcode <> 0 Then
MsgBox xmlDoc.parseError.reason
Else
MsgBox xmlDoc.documentElement.xml
End If
Метод parseError используется для проверки документа. В случае возникновения ошибки документ не будет загружен.
Слайд 9Вывод результата работы Примера
Слайд 11Базовые объекты XML DOM
Базовые объекты XML DOM: эти объекты используются
для поддержки пространств имён, типов данных, схем XML, операций XSL,
асинхронной загрузки и для сохранения документов
Объекты DOM: Эти объекты используются для представления реализаций интерфейсов XML DOM
Слайд 12Базовые объекты интерфейсов XML DOM и объекты DOM
Слайд 13Объект DOMDocument
Представляет самый верхний уровень исходного кода XML
Включает методы и
свойства, используемые для получения или создания всех других объектов XML
Создаёт
только один объект: document
Некоторые свойства объекта DOMDocument:
async
attributes
baseName
childNodes
documentElement
Некоторые методы объекта DOMDocument:
createNode
appendChild
Слайд 14Свойство async
Идёт загрузка
Управление возвращается
Вызванный документ
Код VB продолжает выполнение без
ожидания окончания загрузки
async=true
Идёт загрузка
Управление не возвращается
Вызванный документ
Код VB ожидает окончания
загрузки
async=false
Показывает, должен ли документ XML загружаться асинхронно или синхронно
Слайд 15Свойство Attribute
Свойство предназначено только для чтения
Возвращает объект ‘XMLDOMNamedNodeMap’ для тех
узлов, которые могут возвращать атрибуты
XMLDOMNamedNodeMap является интерфейсом XML, предназначенным специально
для работы с атрибутами
Пример:
Слайд 16Свойство baseName
Свойство предназначено только для чтения
Всегда возвращает не пустую строку
Пример:
language="vbscript">
Dim xmlDoc
Dim MyStr
Set xmlDoc = CreateObject("microsoft.xmldom")
xmlDoc.load("candidate.xml")
MyStr = xmldoc.documentElement.childNodes.item(0).baseName
MsgBox MyStr
Слайд 17Свойство childNodes
Свойство только для чтения
Пример:
Dim xmlDoc
Dim root
Dim oList
Dim Item
Set
xmlDoc
=CreateObject("microsoft.xmldom")
xmlDoc.load("candidate.xml")
Set root = xmldoc.documentElement
Set oList = root.childNodes
For Each Item
in oList
document.write(Item.xml+"
")
Next
Слайд 18Свойство documentElement
Это корневой элемент документа
Это свойство предназначено для чтения/записи
Возвращает объект
‘XMLDOMElement’, который представляет корень дерева документа XML
Пример:
Dim root
Dim xmlDoc
Set
xmlDoc = CreateObject("microsoft.xmldom")
xmlDoc.async = False
xmlDoc.load("candidate.xml")
Set root = xmlDoc.documentElement
For i = 0 To (root.childNodes.length -1)
document.write(root.childNodes.item(i).childNodes.item(0)
.text + "
")
Next
Слайд 19Пример использования методов объекта DOMdocument
language="vbs">
Dim xmlDoc
Dim
root
Dim newNode
Set xmlDoc = CreateObject("microsoft.xmldom")
xmlDoc.async = False
xmlDoc.load("candidate.xml")
Set root = xmlDoc.documentElement
MsgBox root.xml
Set newNode = xmlDoc.createNode (1, "SampleNode", "")
root.appendChild(newNode)
MsgBox root.xml
Слайд 20Метод createNode
Создаёт узел, используя заданный тип, имя и пространство имён
Синтаксис:
objNode=oDocument.createNode(type,name,namespaceURI)
Параметр
type: однозначно идентифицирует тип узла
Параметр name: строка, содержащая значение для
свойства ‘nodeName’ нового узла
namespaceURI: строка, определяющая пространство имён URI
Узел создаётся в контексте указанного пространства имён
Если пространство имён не задано, то узел создаётся в пространстве имён документа
Слайд 21Метод appendchild
Добавляет новый узел
Возвращает новый "дочерний" узел, успешно добавленный к
списку
Пример:
Dim xmlDoc
Dim root
Dim newNode
Set xmlDoc = CreateObject("microsoft.xmldom")
xmlDoc.async = False
xmlDoc.load("candidate.xml")
Set root = xmlDoc.documentElement
MsgBox root.xml
Set newNode = xmlDoc.createNode (1, "SampleNode", "")
root.appendChild(newNode)
MsgBox root.xml
Слайд 22Событие ondataavailable
Сообщает о доступности данных в документе XML
При работе с
асинхронными данными удобно начать обработку параллельно с загрузкой, сразу после
того, как данные становятся доступными
Генерируется каждый раз, когда поступает новая порция данных
Свойство ‘readstate’ определяет несколько состояний, которые характеризуют текущий статус асинхронной загрузки
Слайд 23Объект XMLDOMNode
Объект XMLDOMNode
Некоторые объекты DOM, которые являются производными от объекта
XMLDOMNODE
DOMDocument
XTLRuntime
XMLDOMAttribute
XMLDOMCDATASection
XMLDOMComment
XMLDOMDocumentType
Слайд 24Пример использования объекта XMLDOMNode
Dim cNode
Set xmlDoc = CreateObject("microsoft.xmldom")
xmlDoc.async =
false
xmlDoc.load("candidate.xml")
Set cNode = xmlDoc.documentElement.childNodes.item(0)
MsgBox cNode.xml
Слайд 26Свойство lastChild
Свойство возвращает последний дочерний узел
Пример:
Dim xmlDoc
Dim currNode
Set xmlDoc
= CreateObject("microsoft.xmldom")
xmlDoc.load("candidate.xml")
Set currNode = xmlDoc.documentElement.lastchild
MsgBox currNode.xml
Слайд 27Свойство nextSibling
Содержит следующий соседний узел для текущего узла в списке
потомков родителя
Пример:
Dim xmlDoc
Dim cNode
Dim nextNode
Set xmlDoc = CreateObject("microsoft.xmldom")
xmlDoc.load("candidate.xml")
Set cNode
= xmlDoc.documentElement.childNodes.item(0)
Set nextNode = cNode.nextSibling
MsgBox nextNode.xml
Слайд 29Свойство Xml
Содержит XML-представление текущего кода и всех его потомков
Свойство предназначено
только для чтения
Всегда возвращает строку в кодировке UNICODE, которая отменяет
исходную кодировку атрибута
выглядит в свойстве xml, как:
Слайд 31Метод selectNodes
Возвращает список найденных (совпавших с образцом) узлов в объект
XMLDOMNodeList
Пример:
Set xmlDoc = CreateObject("microsoft.xmldom")
xmlDoc.async = False
xmlDoc.load("candidate.xml")
Set oNList = xmlDoc.documentElement.selectNodes("PERSON/NAME")
MsgBox
oNList.length
Слайд 32Объект XMLDOMNodeList
Поддерживает итерацию в дополнение к индексированному доступу
Коллекция список узлов
работает "в прямом эфире", так как все изменения, добавления и
удаления немедленно отражаются в этой коллекции
Слайд 33Свойство length
Представляет количество экземпляров в коллекции
Это свойство предназначено только для
чтения
Пример:
Dim xmlDoc
Dim
objNList
Set xmlDoc = CreateObject("microsoft.xmldom")
xmlDoc.load("candidate.xml")
Set objNList = xmlDoc.getElementsByTagName("PERSON")
For i=0 To (objNList.length -1)
MsgBox (objNList.item(i).text)
Next
Слайд 35Метод nextNode
Возвращает следующий узел в коллекции
Возвращает значение NULL, если следующий
узел отсутствует
Изначально итератор устанавливается в ‘0’, поэтому первый вызов ‘nextNode’
возвращает первый узел в списке
Пример:
Слайд 36Объект XMLDOMNamedNodeMap
Ещё одна коллекция объектов в модели DOM
Возможен доступ по
индексу
Используется для итерации по атрибутам для заданного элемента
Любое изменение в
узле немедленно отображается в коллекции, например, удаление или добавление узлов
Свойства XMLDOMNamedNodeMap
Слайд 37Методы объекта XMLDOMNamedNodeMap
Метод getNamedItem Method: Возвращает объект XMLDOMNode для заданного
атрибута
Синтаксис:
varXMLDOMNode=varXMLDOMNode.getNamedITEM(Aname)
Метод removeNamedItem: Возвращает узел, удалённый из коллекции
Синтаксис:
varXMLDOMNode = varXMLDOMNamedNodeMap.removeNamedItem(Aname)
Слайд 38Объект XMLDOMParseError
Возвращает информацию о последней синтаксической ошибке
Информация включает номер ошибки,
номер строки, позицию символа и текстовое описание
Слайд 39Свойство line
Пример:
Dim xmlDoc
Set xmlDoc = CreateObject("microsoft.xmldom")
xmlDoc.async = False
xmlDoc.load("candidate1.xml")
If xmlDoc.parseError.errorcode
0 Then
MsgBox ("A parse error occurred on line "
&
xmlDoc.parseError.line)
Else
MsgBox xmlDoc.documentElement.xml
End If
Определяет номер строки, которая содержит ошибку
Вывод
Слайд 40Свойство Linepos
Содержит позицию символа в строке, где возникла ошибка
Это свойство
предназначено только для чтения
Пример:
Dim xmlDoc
Set xmlDoc = CreateObject("microsoft.xmlDOM")
xmlDoc.async =
False
xmlDoc.load("candidate1.xml")
If xmlDoc.parseError.errorcode <> 0 Then
MsgBox ("A parse error occurred on line " & xmlDoc.parseError.line & " at position " & xmlDoc.parseError.linepos)
Else MsgBox xmlDoc.documentElement.xml
End If
Слайд 41Свойство srcText
Возвращает полный текст строки, которая содержит ошибку
Это свойство предназначено
только для чтения
Возвращает пустую строку, если ошибка возникла из-за того,
что документ не является правильно сформированным, и ошибка не может быть позиционирована в конкретной строке
Слайд 42Пример использования свойства srcText
Dim xmlDoc
Set xmlDoc = CreateObject("microsoft.xmlDOM")
xmlDoc.async =
False
xmlDoc.load("candidate1.xml")
If xmlDoc.parseError.errorcode 0 Then
MsgBox xmlDoc.parseError.srcText
Else MsgBox
xmlDoc.documentElement.xml
End If
Вывод
Слайд 43Представляет атрибут элемента
Атрибуты – это свойства самого элемента, но не
дочерних узлов этого элемента
Атрибуты считаются свойствами ассоциированных с ними элементов,
а не отдельных и независимых элементов
Свойства объекта parentNode, previousSibiling, nextsibiling имеют значение Null
Объект XMLDOMAttribute
Слайд 44Свойство nodeType
Определяет тип узла XML DOM
Свойство предназначено только для чтения
Свойство
‘nodeTypeString’ возвращает тип узла в виде строки
Синтаксис:
xValue=oXMLNode.nodeType
Допустимые значения для свойства nodeType:
NODE_ELEMENT(1)
NODE_ATTRIBUTE(2)
NODE_TEXT(3)
Слайд 45
Dim xmlDoc
Dim cNode
Set xmlDoc = CreateObject("microsoft.xmldom")
xmlDoc.async = False
xmlDoc.load("candidate.xml")
Set currNode
= xmlDoc.documentElement.childNodes.item(0)
MsgBox currNode.nodeType
Пример использования свойства nodeType
Слайд 46Свойство value
Содержит значение атрибута
Свойство предназначено и для чтения, и для
записи
Для атрибутов с подузлами в строке сцепляется текст всех подузлов
со ссылками на символьные и общие примитивы, заменёнными на их значения
Содержимое строки не анализируется синтаксически
Пример:
Dim xmlDoc
Dim xVar
Set xmlDoc = CreateObject("Microsoft.xmldom")
xmlDoc.async = False
xmlDoc.load("candidate.xml")
Set root = xmlDoc.documentElement
myVar = root.attributes.item(0).value
MsgBox xVar
Слайд 47Свойство text
Содержит текстовое наполнение узла или объединённый текст, представляющий узел
и его объявление
Слайд 48Свойство ownerDocuemnt
Возвращает корень того документа, который содержит заданный узел
Свойство предназначено
только для чтения
Все узлы созданы в контексте документа, и свойство
ownerDocuemnt обрабатывается до тех пор, пока узел не добавляется к другому документу
Если узел удаляется из документа, то это свойство указывает на документ, в который этот узел был включён до удаления
Слайд 49Пример использования свойства ownerDocument
Пример:
Dim xmlDoc
Dim cNode
Dim ownerDoc
Set xmlDoc = CreateObject("Msxml2.DOMDocument")
xmlDoc.async
= False
xmlDoc.load("candidate.xml")
Set cNode = xmlDoc.documentElement.childNodes.item(0).childNodes.item(1)
Set ownerDoc = cNode.ownerDocument
MsgBox ownerDoc.documentElement.tagName
Слайд 50Объект XMLDOMCDATASection
Представляет содержимое секции CDATA
Секции CDATA используются для сокрытия блоков
текста от интерпретации в качестве языка разметки
Единственным разделителем, распознаваемым
в секции CDATA, является строка "]]>"
Не имеет каких‑либо особенных свойств и методов, отличающих его от других
Наследует все те же объекты и свойства, что и XMLDOMTextObject
Слайд 51Свойство specified
Показывает, является ли атрибут заданным явно или унаследован от
значения по умолчанию, заданного в DTD или в схеме
Возвращает
логическое (Boolean) значение
Свойство предназначено только для чтения
Возвращает значение ‘true’ (истина), если атрибут задан явно в элементе
Возвращает значение ‘false’ (ложь), если значение атрибута взято из DTD или из схемы
Слайд 52Пример использования свойства specified
Пример:
Dim xmlDoc
Dim oNamedNodeMap
Dim cNode
Dim myNode
Set xmlDoc
=
CreateObject("microsoft.xmldom")
xmlDoc.async = False
xmlDoc.load("candidate.xml")
Set cNode =
xmlDoc.documentElement.childNodes.item(0)
Set oNamedNodeMap = cNode.attributes
Set myNode
= oNamedNodeMap.item(0)
MsgBox myNode.specified
Слайд 53Метод splitText
Разделяет узел типа text на два узла типа text
и вставляет новый текстовый узел в текущее дерево, как "брата",
который следует непосредственно за разделённым узлом
Параметр, используемый в этом методе, имеет тип long integer (длинное целое)
Этот параметр задаёт количество символов для выполнения разделения данного текстового узла на два узла, начиная с нуля
Метод возвращает объект нового текстового узла
Синтаксис:
oXMLDOMText=oXMLDOMText.splitText(parameter)
Слайд 54Метод substringData
Извлекает подстроки или части строк из полной строки
Первый
параметр этого метода имеет тип данных long integer (длинное целое),
задавая количество символов от начала строки до той позиции, в которой должно начаться извлечение
Значение нуль говорит о том, что копирование должно начинаться с самого начала данных
Второй параметр также является значением типа long integer, задающим количество символов, которые должны быть извлечены в итоговую строку
Синтаксис:
strValue=oXMLDOMCharacterData.substringData(x,y)
Слайд 55Пример использования метода substringData
Пример:
Dim xmlDoc
Dim comment
Dim xStr
Set xmlDoc =
CreateObject("microsoft.xmldom")
xmlDoc.async = False
xmlDoc.load("candidate.xml")
Set comment =
xmlDoc.createComment("Aptech
Ltd.!")
xStr = comment.subStringData(0,6)
msgbox xStr
Слайд 56Объект XMLDOMDocumentType
Содержит информацию обо всех примитивах и нотациях в объявлении
типа документа файла XML
Каждый объект DOM Document включает свойство
‘doctype’, которое идентифицирует объект XMLDOMDocumentType
Свойства объекта предназначены только для чтения
DTD не может быть добавлено в DOMDocument
Слайд 57Свойства entities и name
Свойство entities: Содержит список примитивов, внешних и
внутренних, которые объявлены в декларации типа документа
Синтаксис:
oXMLDOMNamedNodeMap=oXMLDOMDocumentType.entities
Свойство
name: Содержит имя типа документа
Синтаксис:
sValue=oXMLDOMDocuemntType.name
Слайд 58Свойство nodeTypeString
Возвращает строковую версию типа узла
Синтаксис:
strValue=oXMLDOMNode.nodeTypeString
Слайд 59Пример использования свойства nodeTypeString
Пример:
Dim xmlDoc
Dim cNode
Set xmlDoc = CreateObject("microsoft.xmldom")
xmlDoc.async
= False
xmlDoc.load("candidate.xml")
Set cNode =xmlDoc.documentElement.childNodes
.item(0)
MsgBox cNode.nodeTypeString
Выведенная панель сообщений msgbox
Слайд 60Метод replaceChild
Потомки узла node
Childnode1
Childnode2
Childnode3
Childnode4
Узелnode
replaceChild(Childnode5, Childnode4)
Потомки узла node
Childnode1
Childnode2
Childnode3
Childnode5
Дочерние узлы после
выполнения метода замены
Слайд 61Метод removeChild
Потомки узла node
Childnode1
Childnode2
Childnode3
Childnode4
Узелnode
removeChild(Childnode4)
Потомки узла node
Childnode1
Childnode2
Childnode3
Дочерние узлы после выполнения
метода удаления
Слайд 62Объект XMLDOMEntity
Представляет синтаксически обрабатываемые или необрабатываемые примитивы в документе XML
Представляет сам примитив, а не объявление этого примитива
Представляет примитив
в свойстве ‘childNodes’ свойства ‘docType’ (DTD) объекта DOMDocument
Слайд 63Свойство notationName
Возвращает имя нотации узла
Свойство предназначено только для чтения
Содержит имя нотации для синтаксически не анализируемых примитивов
Для синтаксически
анализируемых примитивов это свойство содержит пустую строку
Имя примитива доступно через свойство nodeName
Синтаксис:
sValue=oXMLDOMEntity.notationName
Слайд 64Свойства prefix и publicId
Свойство prefix: Возвращает префикс пространства имён, определённого
для данного объекта
Если префикс не определён, то возвращается пустая
строка
Синтаксис: sValue=oXMLDOMNode.prefix
Свойство publicId: Содержит общедоступный (public) идентификатор, ассоциированный с примитивом
Если общедоступный идентификатор не определён, то свойство содержит пустую строку
Свойство предназначено только для чтения
Синтаксис: sValue=oXMLDOMEntity.publicId
Слайд 65Свойство systemId
Содержит системный идентификатор, ассоциированный с примитивом
Если системный идентификатор
не определён, то свойство содержит пустую строку
Синтаксис:
strValue=oXMLDOMEntity.systemId
Слайд 66Метод transformNode
Обрабатывает узел и его потомков, используя предложенную XSL таблицу
стилей и возвращает результат преобразования
Параметр, передаваемый в метод, является
объектом
Это корректный документ XML или узел DOM, состоящий из элементов XSL, которые определяют преобразование этого узла
Возвращает строку, которая содержит результат преобразования этого документа XML, основанного на таблице стилей XSL
Синтаксис: sValue=oXMLDOMNode.transformNode(x)
Слайд 67Объект XMLDOMProcessingInstruction
Объект представляет инструкцию обработки
Содержимым узла XMLDOMProcessingInstruction является все,
что расположено между разделителями инструкций обработки (PI) и конечным тэгом
Объект является записываемым, и мы можем добавлять инструкции обработки в объект DOMDocument
Пример:
Dim xmlDoc
Dim pi
Set xmlDoc = CreateObject("Microsoft.xmldom")
Set pi=
xmlDoc.createProcessingInstruction(“xml”,”version=“”1.0”””)
Msgbox pi.xml
Слайд 68Свойство parsed
Возвращает значение True (истина), если узел и все его
потомки были подвергнуты синтаксическому анализу и обработаны
Возвращает значение False
(ложь), если какой‑либо узел остался необработанным
Свойство предназначено только для чтения
Синтаксис: bValue=oXMLDOMNode.parsed
Слайд 69Пример использования свойства parsed
Пример:
Dim xmlDoc
Dim root
Set xmlDoc =
CreateObject("microsoft.xmldom")
xmlDoc.async
= True
xmlDoc.load("candidate.xml")
Set root = xmlDoc.documentElement
MsgBox root.parsed
Слайд 70
Метод cloneNode
Узел, для которого следует создать клон
Узел и его
клон
Слайд 71SAX
Сокращение от “Simple API for XML” (Простой прикладной интерфейс для
XML)
Это набор прикладных интерфейсов API для работы с XML
SAX не
требует большого объёма памяти
SAX часто используется в приложениях серверной стороны, так как он быстр, и поддерживает одновременное подключение нескольких клиентских систем к серверу
Изначально SAX был разработан для языка программирования Java
ContentHandler является главным интерфейсом SAX
Слайд 72SAX против DOM
DOM и SAX являются двумя наиболее популярными прикладными
интерфейсами API для обработки документов XML
Возможно объединение SAX и
DOM в пределах одной системы
Слайд 73Подведение итогов – I
Аббревиатура DOM означает Document Object Model. Эта
концепция позволяет воспринимать документ, как объект, и предоставляет возможность извлекать
информацию, вносить изменения и выполнять запросы к документу посредством программного кода.
Три типа моделей документов , поддерживаемых в XML: Линейная модель (Linear Model), которая применима к статическим документам, Древовидная модель (Tree Model), которая применима к динамическим документам, и Объектная модель (Object Model), в которой каждый элемент считается объектом.
Два метода, которыми могут быть созданы документы XML:
XML Island (Островки данных XML)
ActiveX Control (Элементы управления ActiveX)
Программирование XML DOM может быть классифицировано по двум типам объектов:
XML DOM Base Object (Базовый объект XML DOM)
DOM Objects (Объекты DOM)
Слайд 74Подведение итогов – II
Объект ‘XMLDOMNode’ расширяет ядро интерфейса узла XML
DOM. Большинство других объектов DOM являются производными ("наследниками") от объекта
XMLDOMNODE.
Объект ‘XMLDOMNodeList’ – это коллекция (набор) узлов. Его методы позволяют производить итерации по всем узлам‑потомкам заданного узла.
К объекту ‘XMLDOMNamedNodeMap’ можно получить доступ по индексу. Это не означает, что XML DOM строго задаёт порядок этих узлов. Коллекция используется для для итерации по атрибутам для заданного элемента.
Объект ‘XMLDOMParseError’ возвращает информацию о последней синтаксической ошибке. Эта информация включает номер ошибки, номер строки, позицию символа и текстовое описание встретившейся ошибки.
Объект ‘XMLDOMAttribute’ представляет атрибут элемента. Атрибуты – это свойства самого элемента, но не узлов‑потомков элемента.
Объект ‘XMLDOMCDATASection’ представляет содержимое секции CDATA.
Объект ‘XMLDOMDocumentType’ содержит информацию обо всех примитивах и нотациях в объявлении типа документа файла XML.
Simple API for XML (Простой прикладной программный интерфейс для XML) (SAX) – это набор прикладных интерфейсов API, доступный для работы с XML. SAX не требует большого объёма памяти. SAX часто используется в приложениях серверной стороны, так как он быстр.