Как обрабатываются пробельные символы в объектной модели XML?
Иногда объектная модель XML отображает узлы TEXT, содержащие символы пробелов. Когда пробельные символы усекаются, это может вызвать некоторую путаницу. Например, следующий пример XML:
]>
Смит
Джон
Создается следующее дерево:
Инструкция по обработке: xml
Тип документа: человек
ЭЛЕМЕНТ: человек
ТЕКСТ:
ЭЛЕМЕНТ: фамилия
ТЕКСТ:
ЭЛЕМЕНТ: имя
ТЕКСТ:
Имя и фамилия окружены узлами TEXT, содержащими только пробельные символы, поскольку модель содержимого элемента «person» является СМЕШАННОЙ; она содержит ключевое слово #PCDATA; Модель содержимого MIXED указывает, что между элементами может существовать текст. Поэтому верно также следующее:
Моя фамилия Смит, а мое имя
Джон
В результате получается дерево, подобное следующему:
ЭЛЕМЕНТ: человек
ТЕКСТ: Моя фамилия
ЭЛЕМЕНТ: фамилия
ТЕКСТ: и меня зовут
ЭЛЕМЕНТ: имя
ТЕКСТ:
Без пробелов после и перед словом «есть», а также пробелов после и перед словом «и» предложение было бы непонятным. Таким образом, для модели содержимого MIXED актуальны все текстовые комбинации, символы пробелов и элементы. Это не относится к моделям несмешанного контента.
Чтобы узлы TEXT, содержащие только пробелы, исчезли, удалите ключевое слово #PCDATA из объявления элемента «person»:
в результате получится следующее чистое дерево:
Инструкция по обработке: xml
Тип документа: человек
ЭЛЕМЕНТ: человек
ЭЛЕМЕНТ: фамилия
ЭЛЕМЕНТ: имя
Что делает декларация XML?
Объявление XML должно быть указано в верхней части документа XML:
оно определяет следующие элементы:
Документ является документом XML. Детекторы MIME могут использовать это для определения того, имеет ли файл тип text/xml, когда тип MIME отсутствует или не указан.
Документ соответствует спецификации XML 1.0. Это будет важно в будущем, когда появятся другие версии XML.
Кодировка символов документа. Атрибут кодировки является необязательным и по умолчанию имеет значение UTF-8.
Примечание. Объявление XML должно находиться в первой строке документа XML, поэтому следующий файл XML:
выдает следующую ошибку синтаксического анализа:
Недопустимое объявление XML.
Строка 0000002:
Местоположение 0000007: ------^
Примечание. Декларация XML не является обязательной. Если вам нужно указать комментарии или инструкции по обработке вверху, не помещайте декларацию XML. Однако кодировкой по умолчанию будет UTF-8.
Как распечатать XML-документ в читаемом формате?
При создании документа с нуля с использованием DOM для создания файла XML все находится в одной строке без пробелов между ними. Это поведение по умолчанию.
Создает таблицу стилей XSL по умолчанию в Internet Explorer 5 для отображения и печати документов XML в читаемом формате. Например, если IE5 уже установлен, попробуйте просмотреть файл nospace.xml. В браузере должно появиться следующее дерево
:
-
XYZ
12.56.
В XML не вставляются пробельные символы.
Печать читаемого XML очень интересна, особенно когда существуют DTD, определяющие различные типы моделей контента. Например, в модели смешанного содержимого (#PCDATA) нельзя вставлять пробелы, поскольку это может изменить смысл содержимого. Например, рассмотрим следующий XML:
Elephant
Лучше не выводить это как:
E
слон
Потому что границы слов больше не верны.
Все это делает автоматическую печать проблематичной. Если вам не нужно печатать читаемый XML, вы можете использовать DOM для вставки символов пробелов в качестве текстовых узлов в соответствующих местах.
Как использовать пространства имен в DTD? Чтобы использовать пространство имен в DTD, объявите его в объявлении ATTLIST элемента, который его использует, следующим образом:
Тип пространства имен должен быть #FIXED. То же самое касается пространств имен атрибутов:
пространства имен и схемы XML. DTD и схемы XML нельзя смешивать. Например, следующее
xmlns:x CDATA #FIXED "x-schema:myschema.xml"
Не приведет к использованию определения схемы, определенного в myschema.xml. Использование схем DTD и XML являются взаимоисключающими.
Как использовать XMLDSO в Visual Basic?
В качестве примера используйте следующий XML:
Марк Хэнсон
206 765 4583
Джейн Смит
425 808 1111
Вы можете выполнить привязку к набору записей ADO следующим образом:
Создайте новый проект VB 6.0.
Добавьте ссылки на объекты данных Microsoft ActiveX 2.1 или более поздней версии, библиотеку адаптера данных Microsoft и Microsoft XML версии 2.0.
Используйте следующий код для загрузки данных XML в элемент управления XML DSO:
Dim dso как новый XMLDSOControl
Тусклый документ как IXMLDOMDocument
Установите документ = dso.XMLDocument.
doc.Load ("d:test.xml")
использует следующий код для сопоставления DSO с новым объектом набора записей с помощью DataAdapter:
Dim da As New DataAdapter
Установите da.Object = dso
Dim rs как новый ADODB.Recordset
Установите rs.DataSource = da
Доступ к данным:
MsgBox rs.Fields("name").Значение
приводит к строке "Марк Хэнсон".
Как использовать XML DOM в Java?
Должна быть установлена версия MSXML.DLL для IE5. В Visual J++ 6.0 выберите «Добавить COM-оболочку» в меню «Проект», а затем выберите «Microsoft XML 1.0» в списке COM-объектов. Это создаст необходимую оболочку Java в новом пакете под названием «msxml». Эти готовые оболочки Java также доступны для загрузки. Классы можно использовать следующим образом:
импортировать com.ms.com.*;
импортировать msxml.*;
общественный класс Class1
{
public static void main (String[] args)
{
DOMDocument doc = новый DOMDocument();
doc.load(new Variant(" file://d:/samples/ot.xml "));
System.out.println("Загружено" + doc.getDocumentElement().getNodeName());
}
}
В примере кода будет загружен тестовый файл «ot.xml» размером 3,8 МБ из примера Sun Religion. Класс Variant является оболочкой базового типа Win32 VARIANT.
Поскольку вы фактически получаете новую оболочку каждый раз, когда получаете узел, вы не можете использовать сравнение указателей на узлах. Так что не используйте код ниже,
IXMLDOMNode root1 = doc.getDocumentElement();
IXMLDOMNode root2 = doc.getDocumentElement();
если (корень1 == корень2)...
Вместо этого используйте следующий код:
if (ComLib.isEqualUnknown(root1, root2)) ....
Общий размер оболочки .class составляет примерно 160 КБ. Однако для полного соответствия спецификации W3C следует использовать только оболочки IXMLDOM*. Следующие классы представляют собой старые XML-интерфейсы IE 4.0, и их можно удалить из папки msxml:
IXMLAатрибут*,
IXMLDocument*, XMLDocument*
IXMLЭлемент*,
IXMLError*,
IXMLElementCollection*,
тегXMLEMEM_TYPE*
_xml_error*
Это уменьшит размер до 147 КБ. Вы также можете удалить следующие элементы:
DOMFreeThreadedDocument
Доступ к XML-документам из нескольких потоков в приложениях Java.
XMLHttpRequest
Используйте расширение XML DAV HTTP для связи с сервером.
IXTLRвремя выполнения
Определите объект сценария таблицы стилей XSL.
XMLDSOControl
Привязывается к XML-данным на HTML-странице.
XMLDOMDocumentEvents
Обратный вызов во время анализа.
Это уменьшит размер до 116 КБ. Чтобы сделать его еще меньше, учтите тот факт, что сам DOM имеет два слоя: основной уровень состоит из:
DOMDocument, IXMLDOMDocument
IXMLDOMNode*
IXMLDOMNodeList*
IXMLDOMNamedNodeMap*
IXMLDOMDocumentFragment*
IXMLDOMIреализация
IXMLDOMParseError
И информация DTD, которую пользователям может потребоваться сохранить:
IXMLDOMDocumentType
IXMLDOMEntity
IXMLDOMNotation
Все типы узлов в XML-документе являются IXMLDOMNodes, которые обеспечивают полную функциональность, но для каждого типа узла существуют оболочки более высокого уровня. Таким образом, если вы измените оболочку DOMDocument и измените эти конкретные типы на использование IXMLDOMNode, все следующие интерфейсы могут быть удалены:
IXMLDOMАтрибут
IXMLDOMCDATASection
IXMLDOMCharacterData
IXMLDOMКомментарий
IXMLDOMElement
Инструкция IXMLDOMProcessingInstruction
IXMLDOMEntityReference
IXMLDOMтекст
Удаление их уменьшит размер до 61 КБ. Однако для IXMLDOMElement полезны оба метода getAttribute и setAttribute. В противном случае вам нужно использовать:
IXMLDOMNode.getAttributes().setNamedItem(...)