Skip to content

Commit 2552b72

Browse files
authored
Merge pull request #6 from abirambul/node-full-name
Полное имя узла
2 parents 54abf63 + 5997453 commit 2552b72

File tree

4 files changed

+96
-28
lines changed

4 files changed

+96
-28
lines changed

src/Классы/СериализацияДанныхXML.os

Lines changed: 28 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -34,16 +34,17 @@
3434
//
3535
// Параметры:
3636
// ПутьКФайлу - Строка - путь к файлу с данными xml
37+
// ИспользоватьПолноеИмяУзла - Булево - читать полные имена узлов xml, локальные имена если "Ложь" (по умолчанию)
3738
//
3839
// Возвращаемое значение:
3940
// Соответствие, Структура - результат чтения данных xml
4041
//
41-
Функция ПрочитатьИзФайла(Знач ПутьКФайлу) Экспорт
42+
Функция ПрочитатьИзФайла(Знач ПутьКФайлу, Знач ИспользоватьПолноеИмяУзла = Ложь) Экспорт
4243

4344
Чтение = Новый ЧтениеXML;
4445
Чтение.ОткрытьФайл(ПутьКФайлу);
4546

46-
Результат = ПрочитатьXML(Чтение);
47+
Результат = ПрочитатьXML(Чтение, , ИспользоватьПолноеИмяУзла);
4748

4849
Чтение.Закрыть();
4950

@@ -54,7 +55,7 @@
5455
// Выполняет сериализацию данных в файла
5556
//
5657
// Параметры:
57-
// ДанныеЗаписиXML - Соответствие, Массив, Структура, Число, Строка. Дата - данные для сериализации в XML
58+
// ДанныеЗаписиXML - Соответствие, Массив, Структура, Число, Строка, Дата - данные для сериализации в XML
5859
// ПутьКФайлу - Строка - путь к файлу с данными xml
5960
// ЗаписатьОбъявлениеXML - Булево - признак добавления записи объявления XML
6061
//
@@ -78,12 +79,13 @@
7879
// Параметры:
7980
// ЧтениеXML - ЧтениеXML - <описание параметра>
8081
// ИмяКорневогоУзла - Строка - имя текущего узла, для вызова рекурсии
82+
// ИспользоватьПолноеИмяУзла - Булево - читать полные имена узлов xml, локальные имена если "Ложь" (по умолчанию)
8183
//
8284
// Возвращаемое значение:
8385
// Соответствие, Структура - результат чтения данных xml
8486
//
85-
Функция ПрочитатьXML(Знач ЧтениеXML, Знач ИмяКорневогоУзла = "") Экспорт
86-
87+
Функция ПрочитатьXML(Знач ЧтениеXML, Знач ИмяКорневогоУзла = "", Знач ИспользоватьПолноеИмяУзла = Ложь) Экспорт
88+
8789
РезультатЧтения = Новый Структура;
8890
Атрибуты = Новый Соответствие;
8991
Элементы = Новый Соответствие;
@@ -96,7 +98,7 @@
9698
ПрочитатьАтрибуты(ЧтениеXML, Атрибуты);
9799

98100
Если Не ЧтениеXML.ТипУзла = ТипУзлаXML.КонецСущности Тогда
99-
ПрочитатьУзлы(ЧтениеXML, РезультатЧтения, ИмяКорневогоУзла);
101+
ПрочитатьУзлы(ЧтениеXML, РезультатЧтения, ИмяКорневогоУзла, ИспользоватьПолноеИмяУзла);
100102
КонецЕсли;
101103

102104
УпроститьРезультатЧтения(РезультатЧтения);
@@ -111,7 +113,7 @@
111113
//
112114
// Параметры:
113115
// ЗаписьXML - ЗаписьXML - подготовленная запись ЗаписьXML
114-
// ДанныеЗаписиXML - Соответствие, Массив, Структура, Число, Строка. Дата - данные для сериализации в XM
116+
// ДанныеЗаписиXML - Соответствие, Массив, Структура, Число, Строка, Дата - данные для сериализации в XM
115117
//
116118
Процедура ЗаписатьXML(Знач ЗаписьXML, Знач ДанныеЗаписиXML) Экспорт
117119

@@ -295,23 +297,25 @@
295297

296298
КонецПроцедуры
297299

298-
Процедура ПрочитатьУзлы(Знач ЧтениеXML, КорневойУзел, Знач ИмяКорневогоУзла)
300+
Процедура ПрочитатьУзлы(Знач ЧтениеXML, КорневойУзел, Знач ИмяКорневогоУзла, Знач ИспользоватьПолноеИмяУзла)
299301

300302
Пока ЧтениеXML.Прочитать() Цикл
301303

302304
Лог.Отладка("Тип узла <%1>", ЧтениеXML.ТипУзла);
303-
Лог.Отладка("Имя узла <%1>", ЧтениеXML.ЛокальноеИмя);
305+
306+
ИмяУзла = ИмяУзла(ЧтениеXML, ИспользоватьПолноеИмяУзла);
307+
Лог.Отладка("Имя узла <%1>", ИмяУзла);
304308

305309
Если ЧтениеXML.ТипУзла = ТипУзлаXML.КонецЭлемента
306-
И ЧтениеXML.ЛокальноеИмя = ИмяКорневогоУзла Тогда
310+
И ИмяУзла = ИмяКорневогоУзла Тогда
307311
Прервать;
308312
КонецЕсли;
309313

310314
Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
311315

312-
ИмяНовогоУзла = ЧтениеXML.ЛокальноеИмя;
316+
ИмяНовогоУзла = ИмяУзла(ЧтениеXML, ИспользоватьПолноеИмяУзла);
313317
Лог.Отладка("Новый узел <%1>", ИмяНовогоУзла);
314-
СоответствиеУзла = ПрочитатьXML(ЧтениеXML, ИмяНовогоУзла);
318+
СоответствиеУзла = ПрочитатьXML(ЧтениеXML, ИмяНовогоУзла, ИспользоватьПолноеИмяУзла);
315319
ВставитьЭлементУзла(КорневойУзел, ИмяНовогоУзла, СоответствиеУзла);
316320

317321
ИначеЕсли ЧтениеXML.ТипУзла = ТипУзлаXML.Текст Тогда
@@ -376,4 +380,16 @@
376380

377381
КонецПроцедуры
378382

383+
Функция ИмяУзла(ЧтениеXML, Знач ИспользоватьПолноеИмяУзла)
384+
385+
Если ИспользоватьПолноеИмяУзла Тогда
386+
ИмяУзла = ЧтениеXML.Имя;
387+
Иначе
388+
ИмяУзла = ЧтениеXML.ЛокальноеИмя;
389+
КонецЕсли;
390+
391+
Возврат ИмяУзла;
392+
393+
КонецФункции
394+
379395
#КонецОбласти

tests/fixtures/test-full-names.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
<frst:data xmlns:frst="http://example.com/first_level" xmlns:scnd="http://example.com/second_level">
2+
<scnd:data>Значение</scnd:data>
3+
</frst:data>

tests/fixtures/test-rewrite.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
<MetaDataObject xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
2+
<xr:Item xsi:type="xr:MDObjectRef">InformationRegister.РегистрСведений1</xr:Item>
3+
</MetaDataObject>

tests/СериализацияДанныхXML_test.os

Lines changed: 62 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -5,24 +5,9 @@
55
#Использовать tempfiles
66
#Использовать json
77

8-
Перем юТест;
98
Перем Лог;
109

11-
Функция ПолучитьСписокТестов(Знач Тестирование) Экспорт
12-
13-
юТест = Тестирование;
14-
15-
ИменаТестов = Новый Массив;
16-
17-
ИменаТестов.Добавить("ТестДолжен_ПроверитьЧтениеXMLВСоответствие");
18-
ИменаТестов.Добавить("ТестДолжен_ПроверитьЗаписьXMLИзСоответствия");
19-
20-
Возврат ИменаТестов;
21-
22-
КонецФункции
23-
24-
25-
10+
&Тест
2611
Процедура ТестДолжен_ПроверитьЧтениеXMLВСоответствие() Экспорт
2712
Лог = Логирование.ПолучитьЛог("oscript.lib.xml-reader-test");
2813
Лог.УстановитьУровень(УровниЛога.Отладка);
@@ -42,6 +27,7 @@
4227
// Утверждения.ПроверитьРавенство(РезультатЧтения["ФайлПФР"][1]["ТипФайла"]["_Комментарий"], " <Запрос/> ", "Результат должен совпадать с ожиданиями.");
4328
КонецПроцедуры
4429

30+
&Тест
4531
Процедура ТестДолжен_ПроверитьЗаписьXMLИзСоответствия() Экспорт
4632

4733
Лог = Логирование.ПолучитьЛог("oscript.lib.xml-reader-test");
@@ -66,6 +52,66 @@
6652

6753
КонецПроцедуры
6854

55+
&Тест
56+
&Параметры(Истина, "frst:data", "scnd:data")
57+
&Параметры(Ложь, "data", "data")
58+
Процедура ТестДолжен_ПроверитьЧтениеПолныхИменXML(ИспользоватьПолноеИмяУзла, ИмяУзлаПервогоУровня, ИмяУзлаВторогоУровня) Экспорт
59+
60+
Лог = Логирование.ПолучитьЛог("oscript.lib.xml-reader-test");
61+
62+
ФейковыйФайл = ОбъединитьПути(ТекущийСценарий().Каталог, "fixtures", "test-full-names.xml");
63+
64+
ПроцессорXML = Новый СериализацияДанныхXML();
65+
66+
РезультатЧтения = ПроцессорXML.ПрочитатьИзФайла(ФейковыйФайл, ИспользоватьПолноеИмяУзла);
67+
68+
УзелПервогоУровня = РезультатЧтения[ИмяУзлаПервогоУровня];
69+
Утверждения.ПроверитьНеРавенство(УзелПервогоУровня, Неопределено, "Должен быть найден узел первого уровня");
70+
71+
УзелВторогоУровня = УзелПервогоУровня._Элементы[ИмяУзлаВторогоУровня];
72+
Утверждения.ПроверитьРавенство(УзелВторогоУровня, "Значение", "Должно быть найдено значение узла второго уровня");
73+
74+
КонецПроцедуры
75+
76+
&Тест
77+
Процедура ТестДолжен_ПроверитьСохранениеПолныхИменXMLПриПерезаписи() Экспорт
78+
79+
Лог = Логирование.ПолучитьЛог("oscript.lib.xml-reader-test");
80+
81+
ФейковыйФайл = ОбъединитьПути(ТекущийСценарий().Каталог, "fixtures", "test-rewrite.xml");
82+
83+
ПроцессорXML = Новый СериализацияДанныхXML();
84+
85+
РезультатЧтенияДо = ПроцессорXML.ПрочитатьИзФайла(ФейковыйФайл, Истина);
86+
87+
ВременныйФайл = ВременныеФайлы.НовоеИмяФайла("xml");
88+
89+
ПроцессорXML.ЗаписатьВФайл(РезультатЧтенияДо, ВременныйФайл);
90+
91+
РезультатЧтенияПосле = ПроцессорXML.ПрочитатьИзФайла(ВременныйФайл, Истина);
92+
93+
Утверждения.ПроверитьРавенство(
94+
РезультатЧтенияДо["MetaDataObject"]._Атрибуты["xmlns:xr"],
95+
РезультатЧтенияПосле["MetaDataObject"]._Атрибуты["xmlns:xr"],
96+
"Значения после перезаписи должны совпадать");
97+
98+
Утверждения.ПроверитьРавенство(
99+
РезультатЧтенияДо["MetaDataObject"]._Атрибуты["xmlns:xsi"],
100+
РезультатЧтенияПосле["MetaDataObject"]._Атрибуты["xmlns:xsi"],
101+
"Значения после перезаписи должны совпадать");
102+
103+
Утверждения.ПроверитьРавенство(
104+
РезультатЧтенияДо["MetaDataObject"]._Элементы["xr:Item"]._Значение,
105+
РезультатЧтенияПосле["MetaDataObject"]._Элементы["xr:Item"]._Значение,
106+
"Значения после перезаписи должны совпадать");
107+
108+
Утверждения.ПроверитьРавенство(
109+
РезультатЧтенияДо["MetaDataObject"]._Элементы["xr:Item"]._Атрибуты["xmlns:xsi"],
110+
РезультатЧтенияПосле["MetaDataObject"]._Элементы["xr:Item"]._Атрибуты["xmlns:xsi"],
111+
"Значения после перезаписи должны совпадать");
112+
113+
КонецПроцедуры
114+
69115
Процедура ПоказатьНастройкиВРежимеОтладки(ЗначенияПараметров, Знач Родитель = "") Экспорт
70116

71117
Если Не Лог.Уровень() = УровниЛога.Отладка Тогда

0 commit comments

Comments
 (0)