xml

Передача данных через XML

Рассмотрим технологию использования XML для передачи данных на сервер.

Мы уже рассмотрели 2 способа передачи данных на сервер: это простой текст с разделителем и JSON. Но у них есть недостатки:

  • Отсутствие типов данных. У JSON есть только строка, число, null, boolean. Т.е. ограниченный набор данных.
  • Сложно контролировать целостность передаваемых данных.
  • Сложно визуализировать данные, т.е. сложные объекты сложно отобразить, например, в виде html кода.
  • Сложно преобразовывать данные, т.е. сложно преобразовать свойства одного объекта в свойства другого объекта.

Теперь обратимся в XML как способу передачи данных. XML (eXtensible Markup Language) — язык разметки, предназначенный для описания, хранения и передачи структурированных данных. На сегодня XML используют повсеместно.

На базе XML существует много технологий: DOM (програмное взаимодействие с данными), XLink (указатели и ссылки), XPath (описание и выборка элементов), XSL, XSLT (преобразование XML документа).

Разбор XML пакета выглядит так:

//Объект XMLHttpRequest
var req=getXmlHttpRequest();
//Установка обработчика
req.onreadystatechange=function(){
if (req.readyState==4){ //состояние "4 - comlete"
var xml=req.responseXML;}}

Здесь даже сериализацию и десериализацию делать не надо. Это делает сам объект. Как только сервер присылает XML данные, они уже в распарсенном виде (responseXML — DOM модель документа). Подробнее о технологии DOM читайте в предыдущих статьях на сайте.

Иногда для отладки надо сделать сериализацию и десериализацию XML данных (для передачи данных на сервер это делается автоматически, вручную не надо делать). Сделаем сериализацию в строку:

//для IE
var str = dom.xml
//для Firefox
var serializer = new XMLSerializer();
var str = serializer.serializeToString(dom);

Для IE рабочий код короче, т.к. в него уже встроен объект для сериализации, а в других браузерах только появляется объект XMLSerializer для сериализации.

При работе с XML данными обычно мы имеем дело с DOM моделью документа. Поэтому стоит вспомнить некоторые моменты DOM (об этом читайте в предыдущих статьях). Напомню только способы доступа к элементу DOM модели:

//корневой элемент
var root = xmlDOM.documentElement;
//первый элемент в коллекции
var book = root.childNodes[0];
//дочерний элемент
var title = book.childNodes[0];
//текстовый узел элемента
alert(title.firstChild.nodeValue);

Также из DOM модели документа можно выбирать элементы одного типа. Внимание! Функции getElemensById — нет, т.к. в XML id может означать что угодно, а не только идентификатор, поэтому его не применяют.

//выборка всех элементов с одним тегом
var books = xmlDOM.getElementsByTagName("book");

XML также активно используется не только для представления данных, но и для обмена данными в сервер-ориентированной архитектуре. Это такой подход, при котором мы представляем сложное приложение не как классическое клиент-серверное приложение, а как набор сервисов (служб), каждый из которых отвечает за свои задачи. И каждый сервис имеет точки входа (точки взаимодействия). Здесь нет четкого клиента, т.к. одна служба может быть клиентом другой службы. Получается такая распределенная технология. Есть несколько подходов к построению таких технологий — удаленный вызов процедур, SOAP.

Чтобы службы разных клиентов могли взаимодействовать, они должны говорить на одном языке (при этом не важно какая операционная система у службы). И такой язык был разработан и назван RPC.

Протокол XML-RPC

RPC (Remote Procedure Call) — удаленный вызов процедур. Это протокол взаимодействия между двумя удаленными точками. Он позволяет точке «а» вызвать функцию на удаленной точке «б».

Есть несколько реализаций протокола RPC. Рассмотрим реализацию на базе XML.

По сути, клиент и сервер просто обмениваются какими-то XML фрагментами.

XML-RPC предоставляет следующие типы данных:

  • boolean.
  • integer.
  • double.
  • string.
  • date/time.
  • base64.
  • array.
  • struct.
  • null.

Т.е. при передаче определенного типа данных нужно декларировать, что это за тип данных. Структура похожа на объект JSON.

Преобразование XML данных

Для преобразования данных, полученных с сервера в виде XML используют XSLT.

XSLT (eXtendable Stylesheet Language Transformation) — технология, которая помогает получить на вход XML, а на выходе сформировать все, что угодно.

Преобразование XSLT на javaScript — IE

//загрузка документа
var dom = new ActiveXObject("MSXML2.DOMDocument");
dom.async = false;
dom.load('my.xml');
//загрузка XSLT
var xsl = new ActiveXObject("MSXM@.DOMDocument");
xsl.async = false;
xsl.load('my.xsl');
//само преобразование
var result = dom.transformNode(xsl);

Преобразование XSLT на javaScript для Firefox. Ghrome, Opera

var xslStylesheet;
var xsltProcessor = new XSLTProcessor();
//загрузка xsl файла examle.xsl
var myXMLHTTPRequest = mew XMLHttpRequest();
myXMLHTTPRequest.open("GET", "example.xsl", false);
myXMLHTTPRequest.send(null);
//получение xml
xslStileshett = myXMLHTTPRequest.responseXML;
xsltProcessor.importStylesheet(xslStylesheet);
//загрузка xml файла
myXMLHTTPRequest = new XMLHttpRequest();
myXMLHTTPRequest.open ("GET", "example.xml", false);
myXMLHTTPRequest.send(null);
//сама трансформация
var xmlSource = myXMLHTTPRequest.responseXML;
var resultDocument = xsltProcessor.transformToDocument(xmlSource);



Добавить комментарий

Ваш e-mail не будет опубликован.