Имя: Пароль:
1C
1С v8
XSD и чтение XML в дерево значений
0 MadProg
 
16.06.15
18:14
Привет всем кто слышал что-то про сабж.
Задача проста, но мне не поддается...
Есть файл XML, есть смема XSD.
Задача по файлу XML получить структуру (или дерево значений) состоящую из простых типов (т.е. строка, число, булево).
Докапал до ОбъектаXDTO, а дальше туплю.
Если что код (на форуме нашел):

СхемаXML = Новый СхемаXML;
ДвоичныеДанные =  ПолучитьМакет("Схема");
ИмяВременногоФайла = ПолучитьИмяВременногоФайла("xsd");
ДвоичныеДанные.Записать(ИмяВременногоФайла);
ДвоичныеДанные = Неопределено;
СхемаXML.РасположениеСхемы = ИмяВременногоФайла;
СхемыXML = Новый НаборСхемXML;
СхемыXML.Добавить(СхемаXML);
ЧтениеXML = Новый ЧтениеXML();
ЧтениеXML.ОткрытьФайл(ИмяФайла);
Фабрика = Новый ФабрикаXDTO(СхемыXML);
ОбъектXDTO = Фабрика.ПрочитатьXML(ЧтениеXML);
1 Apokalipsec
 
16.06.15
18:28
Более конкретная формулировка задачи? Универсальный парсер который разберет файл на простые типы? Или просто прочитать файлик по схеме?
У тебя ОбъектXDTO случаем не AnyType получается?
2 Serginio1
 
16.06.15
18:39
Проще наверное
Фабрика = СоздатьФабрикуXDTO(ИмяВременногоФайла);
3 MadProg
 
17.06.15
09:42
(1) Да, именно AnyType.
Задача распарсить на простые типы, т.е. на выходе получить дерево из простых типов.
При (2) платформа (8.3.5.1517) машет ручкой и уходит в сад...=)
4 Serginio1
 
17.06.15
10:13
(3) Видно схема для 1С у тебя не валидная.
А читать нужно с типом
Объект=Фабрика.ПрочитатьXML(ЧтениеXML,Фабрика.Тип(ЧтениеXML.URIПространстваИмен,ЧтениеXML.Имя));
5 MadProg
 
17.06.15
10:17
И еще любопытный вопрос зачем нужен метод Проверить() у ОбъектXDTO? Как его использовать если он не возвращает значения?
(4) падение платформы это не оправдывает... Хотя, "удивляться не приходиться" (с)
6 Serginio1
 
17.06.15
11:02
(5) А в конфигурацию твой пакет импортируется?
7 Serginio1
 
17.06.15
11:03
Схема
8 MadProg
 
17.06.15
11:07
В общем мучаться более не стал, взял вот этот вариант http://catalog.mista.ru/public/196890/, для моей задачи идеально.
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн