Чтение XML. Как определить типы узлов и атрибутов не в коде, а где то еще? XDTO? #718325


#0 by Crush
Пришел ко мне очередной xml файл какого то формата. Хочу прочитать. Писать код типа "КореньДОМ.ПолучитьЭлементыПоИмени(" уже надоело. Хочется где то отдельно описать структруктуру xml файла и обращаться к узлам как объектам. Пока начал курить XDTO, но не уверен что двигаюсь в правильном направлении. Подопните пожалуйста. Задайте вектор. В xdto меня смущает такая конструкция ФабрикаXDTO.Тип(";, "Номенклатура"), т.е. описание типа должно лежать на web-ресурсе. А как то в дереве метаданых можно описать структуру и типы и сказать что Этот файл должен читаться вот по Этой структуре?
#1 by Господин ПЖ
>т.е. описание типа должно лежать на web-ресурсе. щито?
#2 by Crush
В примерах везде такая конструкция дробныйТип = ФабрикаXDTO.Тип(";, "decimal"); - это вот локально можно изобразить? Пока такого примера не нашел
#3 by Господин ПЖ
что значит локально? это просто обозначение пространства имен.
#4 by Господин ПЖ
#5 by Поpyчик-4
Ссылки в описаниях типа чисто формальные и описывают пространство имён.
#6 by viacheslav
XDTO для ваших целей самое оно, мне кажется вот цикл из 3 статей, где доступно изложено про XDTO И в частности, ответ из этой статьи на ваш вопрос про пространства имен: По традиции (и по многим другим соображениям), пространства именуются в виде URL-подобных строк. Например, “”. Причем, это не ссылка в сети, это просто строка-идентификатор. Документы пестрят этими “ссылками” и ,сталкиваясь с ними, начинающий специалист впадает в ступор - “что это за адреса, что по ним расположено, а что, если нет интернета...” Так вот, это не адреса, это уникальные идентификаторы пространств имен. Строка может быть любой.
#7 by Господин ПЖ
>Ссылки в описаниях типа чисто формальные не совсем. ссылка говорит что это "стандартный" decimal. По "ГОСТу"... любой крендель может зайти на w3.org и может ознакомиться. будет "нести отсебятину" в коде ссылаясь на это пространство - проблемы буратины
#8 by Crush
Спасибо за вектор!;) Ушел курить
#9 by Зойч
#10 by Господин ПЖ
а что он прочитает без схемы? опять же чем проверять адекватность файла
#11 by Зойч
схему на лету сам составит )))
#12 by Crush
Открыл в отладчике ОбъектXDTO - Вот это круто!!! Осталось только типы задать, а то все примитивные типы - строки. А тип СписокXDTO можно конвертировать в таблицу значений средствами xdto или только кодом тз заполнять?
#13 by Timon1405
посмотрите БСП  - модуль КонтактнаяИнформацияСлужебный, там есть десериализация, может быть будет полезно
#14 by Crush
Что то не курицца никак. В схеме определил числовой тип, а на выходе всё равно строка. test.xml: <?xml version="1.0" encoding="utf-8"?><Корень Число="34,55">блаблабла</Корень>
#15 by Господин ПЖ
ЧтениеXML.ОткрытьФайл покурить параметры
#16 by Crush
Не смог Ссылки нифига не формальные, а очень даже с индивидуальными назначениями. Был удивлен получив тип своего справочника ФабрикаXDTO.Тип(";, "CatalogObject.Номенклатура") Причем если поменять пространство имен, то результат пропадает. Нашел такое же имя в ФабрикаXDTO.Пакеты, коих там много. А где может быть описание их назначений? Я так понимаю, что добавив общий XDTO-пакет Фабрика будет о нем знать и сможет использовать.
#17 by Crush
+ А где может быть описание их назначений? Сам нашел:)
#18 by Crush
Голова что то пухнет. Может кто подскажет как имея файл <?xml version="1.0" encoding="utf-8"?><Корень Число="34,55">блаблабла</Корень> Прочитать его через фабрику и число приобрело бы числовой тип?
#19 by Господин ПЖ
про буратину я уже писал...
#20 by Господин ПЖ
схемы создаются чтобы их соблюдать (с) ко
#21 by Crush
Спасибо! Полезная ссылочка ушла в закладки. Поменял на точку - не помогло. Изменил наименования узла и атрибута на латинские - не помогло (в схеме тоже поменял).
#22 by Crush
Мне вот странно. В примере используется текстовое поле узла <prize>999.50</prize> А я использую значение атрибута узла. Причем текстовое поле со значением "блаблабла" игнорируется (скорее от того, что не прописано в схеме) Может для атрибутов есть какие то другие способы определения типа значения?
#23 by Serginio1
А не проще Фабрика =СоздатьФабрикуXDTO(ИмяФайлаСхемыXSD)
#24 by mistеr
У него схемы нет.
#25 by Crush
Не сработало Ну как же нет. А это что: <?xml version="1.0"?> <xs:schema xmlns:xs=";  <xs:element name="Корень">
#26 by Crush
Точнее сейчас это так выглядит (убрал кирилицу) <?xml version="1.0" encoding="utf-8"?> <xs:schema xmlns:xs=";
#27 by Crush
<?xml version="1.0" encoding="utf-8"?><qqq www="34.55">блаблабла</qqq>
#28 by Зойч
как схему создавал?
#29 by Crush
Через какой то онлайн сервис прогнал xml и получил xsd
#30 by Дык ё
забей на схему, конверти anyType на лету :) www = ФабрикаXDTO.Привести(ФабрикаXDTO.Тип(";, "decimal"), qqq.ПолучитьXDTO("www")).Значение;
#31 by Зойч
<!-- Generated using Flame-Ware Solutions XML-2-XSD v2.0 at --> <xs:schema id="NewDataSet" xmlns="" xmlns:xs="; xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
#32 by Serginio1
#33 by Crush
Да. Убрал из неё всё лишнее (на свой взгляд). Сейчас с такой же пробовал (заменил string на decimal)           <xs:attribute name="www" type="xs:decimal" /> Всё равно не взлетает.
#34 by Crush
тоже не взлетает ЧтениеXML.URIПространстваИмен,ЧтениеXML.Имя - эти свойства пустые. Так и должно быть?
#35 by Crush
Некрасиво как то. Будет таблица из 20 колонок и 10000 строк. Каждое значение приводить к типу накладно будет.
#36 by Serginio1
Нет. Для начала запиши объект в файл и посмотри как он будет выглядеть.
#37 by Serginio1
Вообще при записи лучше придерживаться такой схемы     ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("xsi", ";);     ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("xs", ";); .....
#38 by Crush
Ну наконец то дело сдвинулось с мёртвой точки. Для начинающих хороший пример работы с XDTO в 22 комментарии статьи
#39 by Господин ПЖ
>Ну наконец то дело сдвинулось с мёртвой точки. победил что ли
#40 by Crush
Нет. Только чуть-чуть сдвинулся с мертвой точки и... похоче умом тоже двигаюсь потихоньку. Читать и писать научился. Но почему когда я явно в схеме указываю, что это decimal у меня в объектеХДТО всё равно строка? Если использовать метод ПРИВЕСТИ, то получаю ЧИСЛО. Неужели ко всем свойствам индивидуально нужно применять метод ПРИВЕСТИ? Мне как то кажется, что если я в схеме указал тип атрибута, то все значения этого атрибута должны как то сами соответствовать типу.
#41 by Torquader
Ну если уж очень хочется читать по узлам, то xml можно читать как текстовый файл, тогда прочитать можно всё - даже неправильный xml, но вопрос в том - зачем это нужно.
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С