Terrasoft Platform SDK > Примеры > Файлы > IXMLStorageExample.js
СодержаниеИндекс
IXMLStorageExample.js
Send Feedback

Пример использования интерфейсов 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.