Имя: Пароль:
1C
1С v8
XML: как определить, составной тег или нет
,
0 Антиквар
 
05.05.14
12:13
Всем привет!
Для обработки файла XML использую объект ЧтениеXML, и в цикле:
Пока Чтение.Прочитать() Цикл
КонецЦикла
получаю все элементы.
По структуре у меня нет атрибутов, только теги (Начало/конец элемента) и значения (Текст)
Как мне, прочитав тег, узнать, является он составным или нет? Причем нужно это сделать, прочитав тип узла "НачалоЭлемента". В синтаксисе ничего не нашел. Вот кол-во атрибутов в начале элемента получить можно, а узнать, составной это тег (т.е. имеет вложенные теги), или простой (после которого будет текст) не получается.
Пример:
<SCH>
    <COD>1</COD>
    <SUMMA>590.56</SUMMA>
</SCH>
В данном примере SCH - это составной тег, а COD - обычный.
И мне надо, прочитав тег SCH понять, составной он или нет.
Невозможно?
1 andreymongol82
 
05.05.14
12:42
ЧтениеХМЛ - это для последовательного доступа. Поэтому никак.
Хотя, конечно можно попробовать через ИмеетЗначение (HasValue), но это уже не по пацански как-то.
Лучше ковырять в сторону XTDO-пакетов
2 Антиквар
 
05.05.14
12:52
(1) Понял, спасибо.
ИмеетЗначение() пробовал, это не то. Возвращает истину только у элемента Текст, а у тега, внутри которого этот текст всё-равно будет уже Ложь.
3 Антиквар
 
05.05.14
12:54
(1) >> Лучше ковырять в сторону XTDO-пакетов
До этого не дорос :) Нужно срочно делать, а XTDO для меня пока темный лес
4 andreymongol82
 
05.05.14
13:03
Ну как вариант перегнать всю XML в ДеревоЗначений, а там его уже анализировать.
По XTDO
http://infostart.ru/public/167459/
5 antoneus
 
05.05.14
13:04
(3) Там не так сложно всё. На ИС есть толковые статьи, я через два часа уже сваял первую выгрузку)
6 Антиквар
 
05.05.14
13:13
спасибо всем, нужно будет изучить!
7 echo77
 
05.05.14
14:56
Вот простой пример как загрузить через XDTO

    ЧтениеXML = Новый ЧтениеXML();
    ЧтениеXML.ОткрытьФайл(ИмяФайла);
    Прочитали = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML);
    
    // Обходим что там начитали
    Для Каждого Group Из Прочитали.Group Цикл
        // Ищем/создаем группу
        ГруппаСсылка = ПолучитьЭлементГруппу("у_КН01", Group.Code, Group.Name, Истина, Справочники.у_КН01.ПустаяСсылка());
        
        // Обходим элементы групп
        Если Тип(Group.Type) = Тип("ОбъектXDTO") Тогда
            ЭлементСсылка = ПолучитьЭлементГруппу("у_КН01", Group.Type.Code, Group.Type.Name, Ложь, ГруппаСсылка);
            
        ИначеЕсли Тип(Group.Type) = Тип("СписокXDTO") Тогда
            Для Каждого Type Из Group.Type Цикл
                ЭлементСсылка = ПолучитьЭлементГруппу("у_КН01", Type.Code, Type.Name, Ложь, ГруппаСсылка);
            КонецЦикла;
        Иначе
            Сообщить("Хз как обрабатывать данный объект с типом " + Тип(Group.Type), СтатусСообщения.Важное);
        КонецЕсли;
    КонецЦикла;
8 Антиквар
 
05.05.14
16:25
(7) А что возвращает ФабрикаXDTO.ПрочитатьXML(ЧтениеXML)?
Цикл по каким элементам потом идет непонятно
9 ДенисЧ
 
05.05.14
16:28
(8) Продам СП
10 Антиквар
 
05.05.14
18:02
(9) СП первым делом посмотрел:

"Описание:
Читает элемент данных XDTO указанного типа из объекта чтения XML."

Что возвращает не написано.
Да ладно, не напрягайтесь, как понадобится разберусь наверное
11 DS
 
05.05.14
18:51
Между XML и XDTO есть DOM. Как раз то, что нужно.