Имя: Пароль:
1C
1С v8
Как ДокументDOM может прочитать объект CDATA[]?
0 Garry1010
 
30.10.16
20:44
Не пойму никак может ли объект ДокументDOM прочитать секцию CDATA? Речь о её содержимом. У меня вот записывается туда подчас много чего (это внутренние настройки для отчета) - так вот ЧтениеXML это содержимое прекрасно читает (правда, заглючило что-то - поэтому пробую вариант с ДокументDOM), а вот ДокументDOM - ничего не показывает.
Вариант самого XML примерно такой:
<template>
    <![CDATA[]]></template>
Узел template виден, но содержимого нет - только перенос строки и несколько табов внутри.
1 Torquader
 
30.10.16
21:40
В DOM когда получаешь коллекцию дочерних элементов у того, кому CDATA запихали - один из дочерних элементов - будет секция CDATA - там для неё даже специальный код типа придуман.
Ну а потом через текст можно получить то, что в этой секции живёт.
2 Garry1010
 
30.10.16
21:57
(1) Я же и говорю, что нет такого. Примерно вот так обходит всё и не натыкается на CDATA - то есть видит узел template, а в нём ничего не видит.

    ПостроительDOM = Новый ПостроительDOM;
    ДокументDOM = ПостроительDOM.Прочитать(мЧтениеXML);
    ЧтениеЧерезDOM(ДокументDOM.ЭлементДокумента.ДочерниеУзлы, мЧтениеXML);
...
Процедура ЧтениеЧерезDOM(УзлыDOM, мЧтениеXML)
    Для Каждого стр Из УзлыDOM Цикл
        Если стр.ИмяУзла <> "#text" Тогда    //тут всё равно ничего НЕ ВИЖУ
            Если стр.Атрибуты <> Неопределено Тогда
                Для Каждого атт Из стр.Атрибуты Цикл
                КонецЦикла;
            КонецЕсли;
            ЧтениеЧерезDOM(стр.ДочерниеУзлы, мЧтениеXML);
        КонецЕсли;
    КонецЦикла;
КонецПроцедуры
3 Mauser
 
30.10.16
22:12
(2) Новый ПараметрыЧтенияXML(<Версия>, <Язык>, <ПробельныеСимволы>, <ТипПроверкиПравильности>, <ИгнорироватьОбъявлениеXML>, <ИгнорироватьТипДокумента>, <ИгнорироватьИнструкцииОбработки>, <ИгнорироватьКомментарии>, <ИгнорироватьПробельныеСимволы>, <СекцииCDATAКакТекст>, <ИспользоватьИгнорируемыеПробельныеСимволы>)

предпоследний параметр.
4 Garry1010
 
30.10.16
22:33
(3) Ага!!! Похоже на то - спасибо!
Странно, но раньше у меня и без этой хитрости прекрасно грузились настройки, но если они грузились не все, а лишь отдельные строки... Странно как-то.
Но, блин, надо же было куда запихнуть такой параметр, да ещё так, что нельзя поменять его по ходу дела - только при создании объекта...
5 Garry1010
 
31.10.16
10:18
В продолжение темы: каким образом может быть вот такой глюк (см. скрин на http://ixbt.photo/photo/297286/20917lZhyLSnXoe/IFkhkn1YO0/1159757.png), где Отладчик в Табло показывает одно значение (выделено рамкой), в вычисленном выражении - другое? И - ГЛАВНОЕ - как его решить, блин? Затрахался уже - который день глючит и хз что делать..:((
Главное, что реально туда попадает неверное значение - каким-то непонятным образом в атрибут залезает значение самого узла. Хотя там внутри xml нарисовано что-то типа такого:
<record ПоказательТип="Строка" Показатель="Material production revenue" ИДТип="Строка" ИД="35030010">
6 Garry1010
 
31.10.16
14:29
Ещё чуть сбоку зайду: а строка вида
код = мЧтениеXML.ПолучитьАтрибут("ИД");
не сбивает ли текущую позицию чтения этого объекта мЧтениеXML? То есть не нарушается ли последовательность чтения атрибутов из узла XML? У меня (под Отладчиком) почему-то всё равно глючит и вместо атрибута узла почему-то читает имя самого узла. Вызов ПервыйАтрибут() перед циклом чтения атрибутов не помогает ни разу.
А отладчик мне обязательно(!) нужен, чтобы выяснить, почему эта балда сбивает структуру дерева настроек (которое я, собственно, и загружаю).
7 Garry1010
 
31.10.16
14:40
Сам спросил - сам отвечу. Да, похоже, где-то как-то сбивает. Если не ходить пошагово, то сия ошибка не возникает. А вот если шагать, то имя каким-то непонятным образом слетает. Буду делать как всегда - через одно место. Через промежуточные шаги, в смысле, - со списками да массивами. Шъёрт побъеры!(с)
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс