Как связать xml с html

Обновлено: 26.04.2024

I need to insert HTML content into an XML document, is this possible or should HTML content be, for example, encoded in BASE64 or with something else like that?

5 Answers 5

You can include HTML content. One possibility is encoding it in BASE64 as you have mentioned.

Another might be using CDATA tags.

Example using CDATA :

CDATA's opening character sequence:

CDATA's closing character sequence: ]]>

+1 CDATA is way better IMO because it keeps things human-readable, and doesn't come with base64's unavoidable 33% additional weight

I decided to use BASE64, because it will save data with 100% accuracy, when CDATA and escaping will add extra whitespace if formatted. Also adding CDATA would add extra complexity and would require some kind of prescanning HTML, in case if HTML contained CDATA element.

so long as your html content doesn't need to contain a CDATA element, you can contain the HTML in a CDATA element, otherwise you'll have to escape the XML entities.

The purpose of BASE64 encoding is to take binary data and be able to persist that to a string. That benefit comes at a cost, an increase in the size of the result (I think it's a 4 to 3 ratio). There are two solutions. If you know the data will be well formed XML, include it directly. The other, an better option, is to include the HTML in a CDATA section within an element within the XML.

Please see this.

Text inside a CDATA section will be ignored by the parser.

9. Лекция: Отображение XML-документов с использованием сценариев объектной модели документа

В восьмой лекции вы познакомились с программной моделью Data Source Object (DSO), которая позволяет вам использовать либо связывание данных, либо сценарии для отображения XML-документа с HTML-страницы. DSO хранит данные XML как набор записей, что удобно для отображения только тех XML-документов, которые имеют симметричную структуру записей.

В этой лекции вы узнаете о совершенно иной программной модели, известной как Объектная модель XML-документа, или DOM (Document Object Model). DOM состоит из группы программных объектов, представляющих различные компоненты XML-документа. Свойства и методы этих объектов позволяют вам использовать сценарии для отображения XML-документа с HTML-страницы. DOM хранит данные в иерархической, древообразной структуре, отражающей иерархическую структуру XML-документа – независимо от того, структурирован ли он как набор записей – и вы можете использовать ее для доступа к любым компонентам XML-документа, включая элементы, атрибуты, инструкции по обработке, комментарии и объявления нотаций и примитивов.

В этой лекции вы сначала узнаете, как связывать XML-документ с HTML-страницей, чтобы вы могли получить доступ к документу через DOM. Затем вы познакомитесь с общей структурой DOM и программными объектами, которые в ней содержатся. В начале лекции представлены приемы программирования DOM, демонстрирующие, как отобразить простой XML-документ с фиксированным числом элементов. После этого вы познакомитесь с общими приемами, используемыми для отображения документов, содержащих неизвестное число элементов. После этого вы узнаете о других способах доступа к XML-элементам, а также о способах доступа к атрибутам, примитивам и нотациям. Далее в лекции вам предложено выполнить упражнение, в котором вы создадите DOM-сценарий, позволяющий обрабатывать любой XML-документ и отображать базовую информацию о каждом из его компонентов. В лекции также представлен сценарий, который вы можете использовать для проверки любого XML-документа на корректность формы и валидность.

Связывание XML-документа с HTML-страницей

Чтобы получить доступ к XML-документу с использованием DOM, вы должны связать XML-документ с HTML-страницей. Самый простой способ – сделать это через фрагмент данных. Напомним, что фрагмент данных создается через HTML-элемент с именем XML. Например, следующий элемент BODY HTML-страницы содержит фрагмент данных, который связывает XML-документ, хранящийся в файле Book.xml:

Подробнее о фрагментах данных рассказано в разделе "Шаг первый: установка связи XML-документа с HTML-страницей" в лекции 8.

Идентификатор ID, который вы назначаете фрагменту данных, указывает на DSO документа (см. лекцию 8). Вы можете использовать составляющую XMLDocument DSO для доступа к DOM, как показано в следующей строке кода сценария:

Член XMLDocument содержит корневой объект DOM, известный как узел Документ (Document node). Вы можете использовать узел Документ для доступа к другим объектам DOM.

Так, создание фрагмента данных на HTML-странице предписывает Internet Explorer создать как DSO (представленный непосредственно через ID фрагмента данных), так и DOM (доступ к которой осуществляется через член XMLDocument DSO).

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

Структура DOM

В DOM программные объекты, представляющие XML-документ, называются узлами. Когда Internet Explorer обрабатывает связанный XML-документ и сохраняет его в DOM, он создает узел для каждого из основных компонентов XML-документов, таких как элементы, атрибуты и инструкции по обработке.

DOM использует различные типы узлов для представления различных типов компонентов XML. Например, элемент хранится в узле Element, а атрибут – в узле Attribute. В таблице 9.1 представлены наиболее важные типы узлов.

Таблица 9.1. Основные типы узлов, используемых для представления различных компонентов XML-документа.

Компоненты XML-документа, представляемые узлом

Имя узла (свойство nodeName объекта)

Значение узла (свойство nodeValue объекта)

Корневой узел иерархии документа (т. е. он представляет весь XML-документ)

Имя типа элемента (например, BOOK)

null (любые символьные данные, содержащиеся в элементе, находятся в одном или нескольких дочерних узлах Text)

Текст, принадлежащий элементу, атрибуту или примитиву, которые представлены родителем этого узла

Текст родительского XML-компонента

Атрибут (а также другие пары имя-значение, такие как имя и значение в инструкции по обработке)

Имя атрибута (например, Binding)

Значение атрибута (например, hardcover)

Инструкция по обработке (объявление XML или пользовательская инструкция по обработке)

Предназначение инструкции по обработке (например, xml)

Полное содержимое инструкции по обработке, за исключением предназначения (например, version="1.0")

Весь текст внутри ограничителей комментария

Содержимое раздела CDATA

Объявление типа документа

Имя корневого элемента, содержащееся в объявлении DOCTYPE (например, INVENTORY)

Объявление примитива в DTD

Имя примитива (например, image)

null (значение примитива содержится в дочернем узле Text)

Объявление нотации в DTD

Имя нотации (например, BMP)

null (системный литерал нотации содержится в дочернем узле Attribute с именем SYSTEM)

Вы можете получить каждое из значений узла (перечисленные в последнем столбце) из свойства узла nodeValue. Если компонент XML имеет соответствующее значение (например, атрибут), это значение будет храниться в значении узла. Если компонент XML не имеет значения (например, элемент), DOM устанавливает в качестве значения узла null. Подробнее о большинстве типов узлов, перечисленных в таблице 9.1, вы узнаете далее в этой лекции.

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

Листинг 9.1. Inventory Dom.xml

Каждый узел, как программный объект, имеет свойства и методы, которые позволяют вам осуществлять доступ, отображать, обрабатывать и получать информацию о соответствующем компоненте XML. Например, свойства nodeName и nodeValue (см. таблицу 9.1) дают имя компонента и его значение.

Все типы узлов используют общий набор свойств и методов. Эти свойства и методы разработаны для работы с узлами вообще. В таблице 9.2 представлены некоторые наиболее полезные свойства. Более подробную информацию и примеры использования этих свойств вы найдете далее в этой лекции.

Таблица 9.2. Некоторые полезные свойства, поддерживаемые всеми типами узлов

Множество NamedNodeMap всех дочерних узлов-атрибутов данного узла

AttributeNode = Element.attributes.getNamedItem ("Binding");

Множество NodeList всех дочерних узлов, не являющихся атрибутами, данного узла

Тип данных этого узла (применительно только к определенным типам узлов Attribute)

Первый дочерний узел данного узла, не являющийся атрибутом

Последний дочерний узел данного узла, не являющийся атрибутом

Следующий узел на том же уровне данного узла

Имя данного узла

Цифровой код, указывающий на тип данного узла

Строка, содержащая тип данного узла, строчными буквами (например, "element" или "attribute")

Значение данного узла (или null, если он не содержит значения)

Корневой узел Document документа, содержащего данный узел

Узел, для которого данный узел является дочерним (не действует для узла Attribute)

Предыдущий узел на том же уровне данного узла

Все текстовое содержимое данного узла и все подчиненные узлы Element

Все содержимое XML данного узла и все его подчиненные узлы

Помимо общих свойств и методов, каждому типу узла присущи дополнительные свойства и методы, разработанные для работы с определенным XML-компонентом, который представляет узел. Например, узел Document имеет свойство parseError, которое содержит информацию о любой ошибке, возникающей в процессе обработки документа. Данное свойство присуще только узлу Document. Далее в этой лекции вы познакомитесь с таблицей 9.3, в которой представлены наиболее полезные свойства и методы для некоторых типов узлов.

Подсказка . Свойство будет иметь значение null, если данное свойство не применимо к определенному узлу. Например, если узел представляет XML-компонент, который не имеет атрибутов (например, узел Document или Comment), его свойство attributes будет иметь значение null. Если узел представляет XML-компонент, который не имеет типа данных (тип данных имеют только определенные атрибуты), его свойство dataType будет иметь значение null. Если узел не имеет дочернего узла, не являющегося атрибутом, его свойство firstChild будет иметь значение null. Если узел относится к типу, который не имеет значений (например, узел Document или Element), его свойство nodeValue также будет иметь значение null

Обратите внимание в таблице 9.2, что каждый узел обладает набором свойств, которые позволяют вам перемещаться в иерархии узла – т. е. получать доступ к другим узлам от текущего узла. Например, рассмотрим документ из Листинга 9.1. Если переменная Document содержит корневой узел Document, следующий код приведет к отображению содержимого комментария, расположенного в начале документа (этот комментарий DOM хранит как второй дочерний узел узла Document):

В предыдущем разделе вы узнали, как осуществлять доступ к корневому узлу Document через член XMLDocument DSO, который получается из фрагмента данных XML. Узел Document является шлюзом к XML-документу. Вы можете использовать его для доступа к другим узлам. В последующих разделах вы познакомитесь с особыми способами доступа к узлам.

Доступ и отображение элементов XML-документа

В этом разделе вы познакомитесь с основными приемами использования HTML-страницы и DOM для отображения элементов XML-документа. Эти приемы демонстрируются в Листингах 9.2 и 9.3.

Листинг 9.2. Book.xml

Листинг 9.3. DomDemo Fixed.htm

Листинг 9.2 содержит простой XML-документ, который описывает одну книгу. Его корневой элемент, BOOK, содержит пять дочерних элементов (TITLE, AUTHOR, BINDING, PAGES и PRICE), каждый из которых содержит символьные данные, описывающие характеристики книги.

Листинг 9.3 содержит HTML-страницу, которая отображает содержимое каждого из дочерних элементов в XML-документе. На рисунке 9.2 показано как эта страница выглядит в Internet Explorer.

XML-документ связан со страницей через следующий фрагмент данных:

Установки атрибутов FOR="window" и EVENT="ONLOAD" предписывают браузеру выполнять код из элемента SCRIPT при первом открытии окна страницы до того, как будет отображено содержимое страницы.

Сценарий первым делом получает узел Document, который представляет весь документ и формирует корневой элемент иерархии узлов DOM. Он делает это через член XMLDocument DSO, как было описано ранее в этой лекции:

Далее сценарий получает доступ и отображает символьные данные, содержащиеся в каждом из дочерних элементов корневого элемента (TITLE, AUTHOR, BINDING, PAGES и PRICE). Например, он отображает содержимое первого дочернего элемента (TITLE) следующим образом:

Вот пояснение выражения, стоящего справа от знака равенства.

Document содержит узел Document в основании (корне) иерархии узлов DOM.

documentElement представляет собой свойство узла Document. Оно содержит узел Element, представляющий корневой элемент XML-документа – в нашем примере, BOOK.

Примечание . Свойство documentElement является одним из специфических для конкретного узла свойств, предоставляемых узлом типа Document. В таблице 9.3 представлены другие полезные свойства, а также методы, относящиеся к узлу Document. Имейте в виду, что для узла Document вы можете использовать и общие свойства узлов, представленные в таблице 9.2.

childNodes является свойством узла Element для корневого элемента. Оно содержит множество всех дочерних узлов корневого узла Element, не являющихся атрибутами. В нашем примере оно содержит узлы Element для пяти дочерних XML-элементов: TITLE, AUTHOR, BINDING, PAGES и PRICE. Выражение childNodes(0) ссылается на первый из этих дочерних узлов (а именно, на элемент TITLE).

text является свойством узла, возвращаемого выражением childNodes(0). Оно предоставляет весь текст, содержащийся в этом узле, а также текст, принадлежащий любому подчиненному узлу Element. В нашем примере TITLE не имеет подчиненных элементов, поэтому свойство text содержит только собственно текст элемента TITLE, "The Adventures of Huckleberry Finn".>

Примечание . Свойства childNodes и text относятся к общим свойствам узлов (см. таблицу 9.2).

Таблица 9.3. Полезные свойства и методы, предоставляемые узлами Document. Общие свойства приведены в таблице 9.2

8. Лекция: Отображение XML-документов с использованием связывания данных

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

При связывании данных вы соединяете XML-документ с HTML-страницей, а затем встраиваете стандартные HTML-элементы, такие как SPAN или TABLE, в отдельные XML-элементы. HTML-элементы затем автоматически отображают содержимое XML-элементов, в которые они встроены.

Связывание данных, как и другие методы, о которых вы узнаете в этой лекции, работает только с XML-документом, который симметрично структурирован, например, как базы данных, – а именно, элементы документа могут быть интерпретированы как набор записей и полей. В простейшем случае такой документ состоит из корневого элемента, содержащего множество элементов одинакового типа (записи), каждый из которых имеет одинаковый набор дочерних элементов, все из которых содержат символьные данные (поля). В качестве примера можно привести документ Inventory.xml, который представлен в Листинге 8.1. Элементы BOOK этого документа могут быть интерпретированы как записи, а элементы, вложенные в каждый элемент BOOK (TITLE, AUTHOR и т.д.), могут быть интерпретированы как поля. Далее в этой лекции вы подробнее узнаете о специфических структурах документа, которые подходят для связывания данных. Если структура документа такова, что не допускает связывание данных, можно использовать метод создания сценариев, о котором пойдет речь в лекции 9.

В этой лекции вы прежде всего получите сведения о двух основных шагах при связывании данных. Затем вы узнаете в подробностях, как привязать XML-документ к HTML-странице (первый основной шаг) и как сцеплять элементы HTML с элементами XML (второй основной шаг). Наконец, вы узнаете, как программировать Web-страницу с помощью сценариев, которые используют в качестве базового объекта программирования связанные данные (а именно, Data Source Object, или DSO). Вы можете применять эти сценарии совместно со связыванием данных – либо независимо.

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

Основные шаги

Вот два основных этапа при связывании данных:

Установка связи XML-документа с HTML-страницей, на которой вы хотите отобразить данные XML. Этот шаг обычно реализуется включением HTML элемента с именем XML в HTML-страницу. Например, следующий элемент на HTML-странице связывает XML-документ Book.xml со страницей:

Сцепление HTML элементов с XML-элементами. Когда вы сцепляете HTML элементы с XML-элементом, HTML-элемент автоматически отображает содержимое XML-элемента. Например, следующий элемент SPAN на HTML-странице сцеплен с элементом AUTHOR связанного XML-документа:

В результате HTML-элемент SPAN отображает содержимое XML-элемента AUTHOR.

Базовая технология связывания данных в действительности столь же проста, как в этом примере, хотя в дальнейшем вы познакомитесь с различными вариациями и способами использования этой технологии.

Шаг первый: установка связи XML-документа с HTML страницей

Чтобы отобразить XML-документ на HTML странице, вы должны установить его связь со страницей. Самый простой путь сделать это в Microsoft Internet Explorer – включить в страницу HTML-элемент с именем XML, так называемый фрагмент данных. Вы можете использовать одну из двух различных форм записи для фрагмента данных.

В первой форме весь текст XML-документа помещается между начальным и конечным тегами XML. Вот пример фрагмента данных на следующей HTML-странице:

Во второй форме записи HTML-элемент с именем XML остается пустым и содержит только URL XML-документа. Вот пример фрагмента данных на HTML-странице:

В предыдущем примере текст XML-документа должен содержаться в отдельном файле Book.xml:

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

Примечание. Имейте в виду, что элемент с именем XML, используемый для создания фрагмента данных, не является собственно XML-элементом. Это просто HTML-элемент, который содержит XML-элементы. Следовательно, использование синтаксиса XML для пустого элемента, , недопустимо

Вы должны присвоить атрибуту ID фрагмента данных уникальный идентификатор, который используете для доступа к XML-документу с HTML-страницы. (В предыдущем примере в качестве значения для ID выступает "dsoBook".)

При второй форме записи фрагмента данных вы присваиваете атрибуту SRC URL файла, содержащего данные XML. Вы можете использовать полный URL, как в следующем примере:

Чаще, однако, вы используете частичный URL, который задает местонахождение относительно местонахождения HTML-страницы, содержащей фрагмент данных. Например, атрибут SRC в следующем фрагменте данных указывает, что файл Book.xml находится в той же папке, что и HTML-страница:

Относительные URL более распространены, потому что XML-документ обычно содержится в той же папке, что и HTML-страница, либо в одной из вложенных папок.

Как хранятся данные XML

Когда Internet Explorer открывает HTML-страницу, его встроенный XML-процессор синтаксически анализирует XML-документ. Internet Explorer также создает программный объект, который носит название Объект исходных данных (Data Source Object DSO), который хранит данные XML и обеспечивает доступ к этим данным. DSO хранит данные XML как набор записей – т.е. множество записей и их полей. Например, если вы включите документ Inventory.xml (см. Листинг 8.1) в страницу как фрагмент данных, DSO будет хранить каждый элемент BOOK как запись, а каждый дочерний элемент внутри BOOK (TITLE, AUTHOR и т.д.) как поле.

Когда вы сцепляете HTML-элемент с XML-элементом, DSO автоматически предоставляет значение XML-элемента и управляет всеми его свойствами. DSO также позволяет вам напрямую осуществлять доступ и манипулирование имеющимся набором записей посредством ряда методов, свойств и событий. Методы представляют собой функции, которые вы можете вызывать со страницы для доступа или модификации набора записей. (Например, вы можете использовать методы для перемещения между записями.) Свойства представляют собой установленные на данный момент параметры, которые вы можете считывать и в ряде случаев изменять со страницы. (Например, вы можете считать свойство, которое сообщает вам, достигли ли вы последней записи.) События представляют собой определенные смены состояний (например, изменение значений записи), которыми вы можете управлять посредством функции сценария, который вы создаете для страницы.

На странице идентификатор, который вы присваиваете атрибуту ID во фрагменте данных, представляет DSO. (В предыдущем разделе в рассмотренном примере таким идентификатором является dsoBook.)

Проверка на наличие ошибок XML

Чтобы увидеть описание какой-либо ошибки, имеющейся в связанном XML-документе, вы можете протестировать документ с использованием сценариев проверки на корректность и валидность, представленных в разделе "Проверка валидности XML-документа" в лекции 9.

Шаг второй: сцепление HTML-элементов с XML-элементами

Вы можете осуществлять сцепление HTML-элементов с XML-элементами двумя основными способами.

Табличное сцепление , что означает сцепление HTML-элемента TABLE с данными XML, так что в таблице автоматически отображается весь набор записей, принадлежащих XML-документу.

Сцепление по отдельным записям , что означает сцепление не табличных элементов HTML (например, элементов SPAN) с XML-элементами таким образом, что за один раз отображается только одна запись.

Использование табличного сцепления данных

Самый простой способ отобразить XML-документ, который состоит из группы записей (такой как Inventory.xml, представленный в Листинге 8.1), – это сцепить HTML-элемент TABLE с данными XML таким образом, чтобы в таблице автоматически отображались сразу все записи (или одна страница записей за раз, если вы установили режим постраничного отображения). При таком подходе Internet Explorer берет на себя большую часть работы; вам не нужно писать сценарии или вызывать методы (функции). (Одно исключение состоит в том, что если вы выбрали режим пролистывания, вам потребуется включить несколько вызовов простых функций, о чем пойдет речь далее в этой лекции.)

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

Использование одной HTML-таблицы для отображения простого набора записей

Вы можете использовать один HTML-элемент TABLE для отображения XML-документа, в котором данные организованы в виде простого набора записей – т.е. XML-документа, составленного следующим образом:

корневой элемент содержит множество элементов типа запись (record) (в этой лекции подобные элементы иногда называются просто записями);

каждый элемент типа запись содержит одинаковый набор элементов типа поле (field) (в этой лекции подобные элементы иногда называются просто полями);

каждый элемент типа поле содержит только символьные данные. (Если дочерний элемент элемента запись содержит один или несколько своих собственных дочерних элементов, DSO интерпретирует его как вложенную запись, а не как поле. О том, как отображать вложенные поля, вы узнаете в разделе "Использование вложенных таблиц для отображения иерархической структуры записей" далее в этой лекции.)

Примером такого типа XML-документов является документ Inventory.xml, который вы использовали в предыдущих лекциях. Он представлен в Листинге 8.1. В этом документе корневой элемент (INVENTORY) содержит набор из восьми элементов-записей (элементы BOOK), и каждый из элементов-записей имеет одинаковый набор элементов-полей, которые содержат только символьные данные (TITLE, AUTHOR, BINDING, PAGES, PRICE).

Листинг 8.1. Inventory.xml

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

В качестве примера возьмем HTML-страницу из Листинга 8.2, которая содержит таблицу, сцепленную с данными документа Inventory.xml из Листинга 8.1.

Листинг 8.2. Inventory Table.htm

XML-документ из Листинга 8.1 связан с HTML-страницей из Листинга 8.2 посредством фрагмента данных на этой странице, имеющего ID dsoInventory:

Таблица определена со стандартным заголовком (элемент THEAD) и с одной строкой (элемент TR). Каждая ячейка в этой строке (т.е., каждый элемент TD) состоит из элемента SPAN, который сцеплен с одним из полей XML-документа таким образом, что этот элемент отображает содержимое поля. Например, первая ячейка содержит элемент SPAN, сцепленный с полем TITLE:

Элемент SPAN связывается с полем XML путем присвоения имени поля (в данном примере TITLE) атрибуту DATAFLD элемента.

Вот как работает связывание данных: даже если в элементе TABLE определена только одна строка, когда браузер отображает таблицу, он повторяет строковый элемент для каждой записи в XML-документе. Т.е., в первой строке, следующей за заголовком, отображены поля (TITLE, AUTHOR и т.д.), принадлежащие первой записи (элемент BOOK для книги Adventures of Huckleberry Finn). В следующей строке отображены поля для второй записи (элемент BOOK для книги Leaves of Grass) и т.д. На рисунке 8.1 показано как выглядит документ в Internet Explorer.

У вас может возникнуть вопрос, почему ячейки (элементы TD) не сцеплены непосредственно с полями XML. Ответ заключается в том, что элемент TD не является связываемым HTML-элементом. (Связываемые элементы перечислены в таблице 8.3 в разделе "Другие способы связывания данных".) Следовательно, вы должны включить внутрь каждого элемента TD связываемый элемент (обычно SPAN).

Использование постраничного отображения

Если XML-документ содержит много записей, вы можете использовать постраничный вывод группы записей за один раз вместо отображения всех записей одновременно в огромной таблице. Для активизации постраничного отображения в обычной связанной таблице, выполните следующие действия.

Установите для атрибута DATAPAGESIZE сцепленного элемента TABLE значение, равное максимальному числу записей, которые вы хотите отобразить за раз. Каждая страница записей будет содержать заданное вами число записей. Например, следующий начальный тег для элемента TABLE присваивает число "5" атрибуту DATAPAGESIZE, в результате чего в таблице будет отображено пять записей за раз:

Присвойте уникальный идентификатор атрибуту ID элемента TABLE, как для следующего начального тега:

Чтобы перемещаться между записями, вызывайте методы элемента TABLE, приведенные в таблице 8.1. Для приведенных в последнем столбце примеров предполагается, что таблица имеет идентификатор InventoryTable.

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

· XML-документ может быть предназначен для другой системы;

· XML-документ может содержать некорректные данные;

· XML-документ может содержать ошибки в структуре.

При обработке XML данных валидация – это фундамент для дальнейших действий с XML-документом, информация в валидном XML-документе может быть отправлена да дальнейшую обработку в целевой модуль. Существуют три основные разновидности схем: DTD, XDR и XML-схемы (XSD). На сегодняшний день актуальными являются DTD схемы и более современный подход – XML-схемы (XSD).

Схема DTD

DTD (Document Type Definition, определение типа документа) - это язык описания структуры XML-документа, который используется для проверки грамматики XML-документа и его соответствия определенному стандарту. Это позволяет парсеру на этапе обработки определить, соответствует ли документ необходимым требованиям, т.е. является ли документ валидным. DTD описывает:

· Какие элементы могут присутствовать в документе;

· Вхождение элементов (повторения и т.п.);

· Возможные атрибуты элементов;

· Обязательные / необязательные атрибуты;

· Применяемые в документе сущности.

Sunny

This is a good day!

В рамках DTD доступны четыре определяющих инструкций для разработки определения типа документа:

· ATTLIST (список атрибутов) - объявляет список XML-атрибутов. Эти атрибуты определяются именем, типом данных, неявными значениями по умолчанию и именами любых элементов, позволяющих их использование.

· ELEMENT - объявляет имя типа XML-элемента и его допустимые вложенные (дочерние) элементы.

· NOTATION - объявляет внешнее содержимое, не относящееся к XML (например, двоичные графические данные), а также внешнее приложение, которое обрабатывает это содержимое.

Инструкция ATTLIST

Инструкция ATTLIST используется для перечисления и объявления всех атрибутов, которые могут принадлежать элементу. Сначала указывается имя элемента (или элементов), к которому относится список атрибутов. Затем для всех атрибутов по очереди указывается имя, обязательность и символьные данные, допустимые в качестве значения.

· elementName - имя элемента, к которому относится список атрибутов.

· attributeName - имя атрибута. Этот параметр повторяется столько раз, сколько нужно для перечисления всех атрибутов, используемых с elementName.

· dataType - тип данных для атрибута, названного в параметре attributeName; должен иметь одно из следующих значений:

· CDATA – атрибут содержит только символьные данные.

· ID - значение атрибута должно быть уникальным. Оно не может повторяться в других элементах или атрибутах данного документа.

· IDREF – атрибут ссылается на значение другого атрибута типа ID из данного документа.

· ENTITY – значение атрибута должно соответствовать имени внешней сущности ENTITY, не подвергавшейся синтаксическому разбору и объявленной в том же определении DTD.

· ENTITIES - значение атрибута содержит несколько имен внешних сущностей, не подвергавшихся синтаксическому разбору и объявленных в том же определении DTD.

· NMTOKEN – значение атрибута должно быть лексемой имени. Токены имени допускают символьные значения данных, но накладывают больше ограничений, чем тип CDATA. Лексема имени может содержать буквы, цифры и некоторые знаки препинания — точки, тире, символы подчеркивания и двоеточия. Однако значения лексем имени не могут содержать никаких пробелов и приравненных к ним символов.

· Enumerated – Значения атрибута ограничены перечисленными в списке.

· default - значение по умолчанию для атрибута, заданного параметром attributeName. Возможные значения по умолчанию приведены в таблице 1:

Таблица 1. Значения по умолчанию атрибута default

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

Инструкция ELEMENT

Инструкция ELEMENT применяется для объявления каждого элемента, который используется внутри типа документа, определенного в DTD. Сначала инструкция объявляет имя элемента, а затем определяет, какое содержимое допустимо в элементе. Синтаксис инструкции:

· name - имя элемента. Необходимо точно воспроизвести регистр.

· Content - допустимая модель содержимого для элемента может быть одной из следующих:

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

· EMPTY — в элементе не допускается содержимое, он должен оставаться пустым.

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

В таблице 2 показаны зарезервированные ключевые слова и символы пунктуации, которые могут быть использованы вместе с именами других элементов, объявленных в DTD, для конструирования правила для содержимого элемента.

Таблица 2. Зарезервированные слова и символы ELEMENT

Например для XML-документа:

Инструкция ENTITY

Инструкция ENTITY используется для определения сущностей в DTD с целью их использования как в связанном с DTD XML-документе, так и собственно в DTD. ENTITY представляет собой сокращенную запись для размещения в XML-документе. Сокращенное имя указывается для имени параметра. Инструкции ENTITY особенно полезны в ситуациях, когда требуется повторять сведения или использовать объемные текстовые блоки, которые можно хранить в отдельных файлах. В XML-документе за сокращенным именем следует символ «;» (&abbName;)

Инструкция NOTATION

Инструкция NOTATION используется для определения нотаций. Нотации позволяют XML-документу передавать внешним приложениям уведомляющие сведения. Синтаксис инструкции:

· Name - имя нотации. Обязательно для всех определений нотации.

· publicID - общий идентификатор нотации. Требуется только если в объявлении используется ключевое слово PUBLIC.

· resource - значение для нотации. Обязательно для всех определений нотации. Обычно если нотация является общей, то это идентификатор URI, понятный для человека, но не для компьютеров. Для системных нотаций это значение может указывать имя файла приложения в системе, которое можно использовать для обработки данных, отличных от XML. Например, можно объявить нотацию для помощи в обработке непроанализированной внешней сущности, например графического файла в формате JPEG или GIF.

К основным недостаткам DTD схем относят синтаксические отличия от языка XML, а также отсутствие возможностей работы с типами данных. Эти недостатки устранены в XML-схемах. С созданием XML-схем на языке XSD можно ознакомиться в УМК, предложенном в предыдущей теме.

Как хранятся данные XML

Когда Internet Explorer открывает HTML-страницу, его встроенный XML-процессор синтаксически анализирует XML-документ. Internet Explorer также создает программный объект, который носит название “Объект исходных данных” (Data Source Object - DSO), который хранит данные XML и обеспечивает доступ к этим данным. DSO хранит данные XML как набор записей — т.е. множество записей и их полей.

При сцеплении HTML-элемента с XML-элементом, DSO автоматически предоставляет значение XML-элемента и управляет всеми его свойствами. DSO также позволяет напрямую осуществлять доступ и манипулирование имеющимся набором записей посредством ряда методов, свойств и событий.

На странице идентификатор, который присваивается атрибуту ID во фрагменте данных, представляет DSO.

Передача HTML-разметки

По умолчанию, если символьные данные XML-поля включают HTML-разметку, HTML-элемент, сцепленный с этим полем, воспринимает и отображает символы разметки как литерал. Рассмотрим, например, следующий элемент SPAN, который сцеплен с XML-полем AUTHOR-BIO:

Если поле AUTHOR-BIO содержит элемент I (курсив), например:

Джек Лондон - американский писатель, живший с 1876 по 1916 гг., им была написана повесть <I>Зов предков<I> и множество других литературных произведений.

элемент SPAN, который воспринимает символы HTML-разметки как литералы, отобразит содержимое поля следующим образом:

Джек Лондон - американский писатель, живший с 1876 по 1916 гг., им была написана повесть Зов предков и множество других литературных произведений.

Для некоторых сцепляемых HTML-элементов, таких как SPAN, можно установить для атрибута DATAFORMATAS значение “HTML”, что заставит браузер обрабатывать любую HTML-разметку, содержащуюся в тексте поля, а не просто воспринимать ее как символы-литералы. Предположим, что вышеуказанный элемент SPAN определён следующим образом:

Текст внутри элемента I будет воспринят как текст с курсивным начертанием:

Джек Лондон - американский писатель, живший с 1876 по 1916 гг., им была написана повесть Зов предков и множество других литературных произведений.

Присвоение атрибуту DATAFORMATAS его значения по умолчанию “TEXT” дает тот же эффект, что и пропуск этого атрибута -символы HTML-разметки будут восприниматься как литералы.

Чтобы узнать, какие элементы вы можете использовать для передачи HTML-разметки посредством установки атрибутаDATAFORMATAS=”HTML”, обратитесь к таблице 5.18. Для таких элементов в предпоследнем столбце таблицы (“Передает ли разметку HTML, содержащуюся в поле XML?”) стоит “Да”.

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

Определение типа документа (DTD)

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

· XML-документ может быть предназначен для другой системы;

· XML-документ может содержать некорректные данные;

· XML-документ может содержать ошибки в структуре.

При обработке XML данных валидация – это фундамент для дальнейших действий с XML-документом, информация в валидном XML-документе может быть отправлена да дальнейшую обработку в целевой модуль. Существуют три основные разновидности схем: DTD, XDR и XML-схемы (XSD). На сегодняшний день актуальными являются DTD схемы и более современный подход – XML-схемы (XSD).

Схема DTD

DTD (Document Type Definition, определение типа документа) - это язык описания структуры XML-документа, который используется для проверки грамматики XML-документа и его соответствия определенному стандарту. Это позволяет парсеру на этапе обработки определить, соответствует ли документ необходимым требованиям, т.е. является ли документ валидным. DTD описывает:

How to display XML and other type of data in same page ?

The above XML should be displayed as it is with formatting. Also , I would like to display HTML tables and other stuff in my page. How to achieve this ?

  1. I do get XML in STRING not through file.
  2. I do not want to parse it
  3. I want to display (that's it)
  4. If you say about XSLT ( please give example )
  5. I'm thinking to use Jquery plugin ( any examples?)

6 Answers 6

Simple solution is to embed inside of a element, which will preserve both the formatting and the angle brackets. I have also removed the border with style="border:none;" which makes the textarea invisible.

Awesome and smart answer. Even worked for java problem. I was trying to create html page based on dynamic data in java.

You can use the old tag. I don't know about browser support, but it should still work.

worked for me too! I have been displaying xml content in a

tag for quite some time without any trouble. I just recently noticed it was not longer displaying as xml, this tiny fix took care of it

If you treat the content as text, not HTML, then DOM operations should cause the data to be properly encoded. Here's how you'd do it in jQuery:

Here's how you'd do it with standard DOM methods:

If you're placing the XML inside of HTML through server-side scripting, there are bound to be encoding functions to allow you to do that (if you add what your server-side technology is, we can give you specific examples of how you'd do it).

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