Пример использования интерфейсов IXMLStorage и IXMLStorageNode.
Пример показывает возможность загрузки данных из XML-файла, используя метод IXMLStorage::LoadFromFile, а также рассматривает применение методов интерфейса IXMLStorageNode.
Для запуска примера необходимо наличие корректного XML-файла по адресу <с:\XMLExample.xml>.
Для того чтобы просмотреть результаты работы кода примера, необходимо сохранить исходный код в файл IXMLStorageExample.js и запустить его на исполнение.
//----------------------------------------------------------------------------- // Файл IXMLStorage.js //----------------------------------------------------------------------------- // В данном примере рассмотрено использование интерфейсов // IXMLStorage и IXMLStrorageNode. //----------------------------------------------------------------------------- //@ Start Example var Storage = new ActiveXObject('TSObjectLibrary.XMLStorage'); var StorageNode = new ActiveXObject('TSObjectLibrary.XMLStorageNode'); // Объект хранения представления дерева узлов в текстовом виде var Value = new ActiveXObject('TSObjectLibrary.Value'); Value.Value = new ActiveXObject('TSObjectLibrary.StringsList'); // Функция вывода сообщения function ShowMessage(Str) { for (var i = 1; i < arguments.length; i++ ) { Str = Str.replace(new RegExp('%' + i), arguments[i]); } WScript.Echo(Str); } // Функция рекурсивного построение дерева узлов function BuildTree(Level, Item, Value) { // Строка для хранения конечного результата var TotalString = new String(); // Строка выравнивания позиций узлов по ширине нижних уровней var WidthString = new String(); // Переход на уровень вниз Level++; // Создание текущей глубины обхода для текстового представления, //если она не была достигнута if (Level >= Value.Value.Count) { Value.Value.Add(''); } // Cчитывание строки структуры уровня для добавления узлов // того же уровня TotalString = Value.Value.Items(Level); // Выравнивание узла верхнего уровня по ширине нижних узлов. for (var k = Level + 1; k < Value.Value.Count; k++) { WidthString = Value.Value.Items(k); while (TotalString.length < WidthString.length) { TotalString += '_'; } } // Добавление элемента в текстовое представление TotalString = TotalString + '<' + Item.Name + '>'; Value.Value.Items(Level) = TotalString; // Рекурсивный вызов построения дерева для всех дочерних узлов for (var i = 0; i < Item.Count; i++) { BuildTree(Level, Item.Items(i), Value); } // Переход на уровень вверх в дереве после завершения обхода // текущего узла Level--; // Вывод сообщения о завершении обхода дерева if (Level < 0) { ShowMessage("Обход дерева узлов завершен."); } } // Файл для загрузки XML-данных (необходимо наличие корректного XML-файла // по указанному адресу) var FileName = 'c:\XMLExample.xml'; // Загрузка XML-данных из файла Storage.LoadFromFile(FileName); // Вывод текста XML var MessageString = Storage.Text; ShowMessage("Загруженный XML-файл:\n " + MessageString); // Корневой узел StorageNode = Storage.RootNode; // Построение дерева для загруженого XML-документа BuildTree(-1, StorageNode, Value); // Вывод дерева узлов XML MessageString = Value.Value.Text; ShowMessage("Вывод дерева узлов:\n " + MessageString); //----------------------------------------------------------------------------- // Применение методов интерфейса IXMLStorageNode. //----------------------------------------------------------------------------- // Вывод имени корневого узла var Name = StorageNode.Name; ShowMessage("Имя корневого узла: " + Name); // Вывод значения атрибута'ID' корневого узла, если атрибут 'ID' существует if (StorageNode.GetIsAttributeExists('ID')) { WScript.Echo("Значение атрибута 'ID' корневого узла: " + StorageNode.GetAttributeAsStr('ID', "Значение по умолчанию")); } // Создание дочернего узла 'Structure' (если его нет) и // сохранение текстового представления дерева в атрибуте этого узла var ChildNode = StorageNode.GetChildNode('Structure'); ChildNode.SetAttributeAsVariant('Text', Value.Value.Text); // Работа с атрибутами типа "Дата/Время" // Создание переменной для работы с типами "Дата/Время" var NodeDateTime = new Date().getVarDate(); // Установка значения 'true' признаку записи атрибутов // Атрибуты будут сохраняться в XML, // хотя их значения равны значениям по умолчанию Storage.StoreDefaultValues = true; // Создание атрибута 'Time' и установка его значения StorageNode.SetAttributeAsTime('Time', NodeDateTime, NodeDateTime); // Создание атрибута 'Date' и установка его значения StorageNode.SetAttributeAsDate('Date', NodeDateTime, NodeDateTime); // Создание атрибута 'DateTime' и установка его значения StorageNode.SetAttributeAsDateTime('DateTime', NodeDateTime, NodeDateTime); // Создание атрибута 'VariantDateTime' и установка его значения StorageNode.SetAttributeAsVariant('VariantDateTime', NodeDateTime); // Работа с атрибутами числового, логического и строкового типов // Создание переменных необходимых типов var BoolValue = true; var StringValue = new String("Пример строки"); var FloatValue = 5.9349; // Создание атрибута 'StirngValue' и установка значения строкового типа StorageNode.SetAttributeAsStr('StringValue', StringValue, StringValue); // Создание атрибута 'BoolValue' и установка значения логического типа StorageNode.SetAttributeAsBool('BoolValue', BoolValue, BoolValue); // Создание атрибута 'FloatValue' и установка значения // числового типа с плавающей запятой StorageNode.SetAttributeAsFloat('FloatValue', FloatValue, FloatValue); // Создание дочернего узла 'Includes' (если его нет). ChildNode = StorageNode.GetChildNode('Includes'); // Создание атрибута 'FloatValue' узла 'Includes' и установка // числового значения с плавающей запятой ChildNode.SetAttributeAsFloat('FloatValue', FloatValue, FloatValue); // Считывание значения атрибута 'FloatValue' ShowMessage("Значение созданного атрибута 'FloatValue': " + ChildNode.GetAttributeAsVariant('FloatValue')); // Считывание значения атрибута, который содержит строку // некорректного числового формата ChildNode.SetAttributeAsStr('IntStr', "Некорректное значение целого числа",""); ShowMessage("Значение атрибута 'IntStr', которое не является целым (значение по умолчанию-25):\n " + ChildNode.GetAttributeAsInt('IntStr', 25)); // Вывод измененного текста XML ShowMessage("Измененный текст XML:\n " + Storage.Text); // Сохранение XML в файл FileName = 'c:\XMLExampleOutput.xml'; Storage.SaveToFile(FileName, 'UTF-8'); // Вывод сообщения о файле, в котором сохранены выполненные изменения ShowMessage("Изменения XML-данных можно просмотреть в файле %1.", FileName); //@ End Example
|
Copyright (с) Terrasoft 2002-2012.
|