Имя: Пароль:
1C
1С v8
как читать XML блоками?
,
0 Помогите
 
17.04.12
12:20
Как читать XML блоками? Тоесть не по узлам как через чтениеXML, а прочитать целиком основной блок, потом из этого блока читать подблоки и так делее рекурсивно?
1 Serginio1
 
17.04.12
12:22
ПостроительDOM ?
2 pumbaEO
 
17.04.12
12:22
Как бы ты не читал, блоками, не блоками, а чтение файла все равно будет последовательно. Что ты хочешь выиграть от чтения блоками.
3 acsent
 
17.04.12
12:23
либо узлами либо весь файл сразу
4 GenV
 
17.04.12
12:25
3+ можно часть узлов пропускать сразу через ЧтениеXML.Пропустить()
5 acsent
 
17.04.12
12:28
(4) пропустить все равно читает файл, только результат не возвращает
6 GenV
 
17.04.12
12:29
(5) Конечно. Только шустрее, чем программно пропуск блока обрабатывать.
7 Помогите
 
17.04.12
12:32
(1) Вроде оно. Делаю. Жаль примера нет. Но ничего.
8 Serginio1
 
17.04.12
12:35
Процедура ВывестиУзелДом(Док,Отступ)
   Если Док.ЕстьАтрибуты() Тогда
       Атрибуты=Док.Атрибуты;
       Для каждого Стр из Атрибуты Цикл
           Сообщить(Отступ+"Атрибут "+Стр.Имя+" "+Стр.Значение);
   //        ВывестиУзелДом(Стр,Отступ+" ")
       КонецЦикла;
   КонецЕсли;
   
       Для каждого Узел из Док.ДочерниеУзлы Цикл
           Сообщить(Отступ+Узел.ТипУзла+" "+Узел.ИмяУзла);
           Если Узел.ТипУзла=ТипУзлаDOM.Элемент Тогда
               ВывестиУзелДом(Узел,Отступ+" ")
           ИначеЕсли Узел.ТипУзла=ТипУзлаDOM.Текст Тогда
               Сообщить(Узел.ТекстовоеСодержимое);
               Иначе
               Сообщить("Не найден узел "+Узел.ТипУзла);

           КонецЕсли;
           Сообщить(Отступ+"КонецУзла"+" "+Узел.ИмяУзла);
       КонецЦикла;
   

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

Функция ПрочитатьДОМСтрока(Строка)
     Чтение= новый ЧтениеXML;
   Чтение.УстановитьСтроку(Строка);
   Построитель=новый ПостроительDOM;
   Док=Построитель.Прочитать(Чтение);
   SSDLNamespace="http://schemas.microsoft.com/ado/2009/02/edm/ssdl";
   CSDLNamespace = "http://schemas.microsoft.com/ado/2008/09/edm";
   MSLNamespace = "http://schemas.microsoft.com/ado/2008/09/mapping/cs";

   Пространства=Док.ПолучитьЭлементПоИдентификатору("Edmx");
   //Атрибуты.ПолучитьИменованныйЭлемент("Name")
   Контейнер=Док.ПолучитьЭлементыПоИмени(SSDLNamespace,"EntityContainer");
   Для каждого узел из Контейнер Цикл
       Если узел.URIПространстваИмен=SSDLNamespace Тогда
   //    ВывестиУзелДом(узел,"");
   
       ИначеЕсли узел.URIПространстваИмен=CSDLNamespace Тогда
   //    ВывестиУзелДом(узел,"");
   //    ВывестиNavigationProperty(узел,CSDLNamespace);
      // ВывестиАссоциации(узел,CSDLNamespace)
       КонецЕсли;
   КонецЦикла;
       
   Контейнер=Док.ПолучитьЭлементыПоИмени(CSDLNamespace,"EntityType");
   Для каждого узел из Контейнер Цикл
       Если узел.URIПространстваИмен=CSDLNamespace Тогда
       //ВывестиАссоциации2(Док,CSDLNamespace);
       
       КонецЕсли;
   КонецЦикла;
   Контейнер=Док.ПолучитьЭлементыПоИмени(MSLNamespace,"EntityContainerMapping");
   Для каждого узел из Контейнер Цикл
       Если узел.URIПространстваИмен=MSLNamespace Тогда
   //        ВывестиУзелДом(узел,"");    
       КонецЕсли;
   КонецЦикла;

   Контейнер=Док.ПолучитьЭлементыПоИмени("","ConceptualModels");
   Для каждого узел из Контейнер Цикл
//        Если узел.URIПространстваИмен=CSDLNamespace Тогда
//            ВывестиУзелДом(узел,"");    
ВывестиNavigationProperty(узел,CSDLNamespace);

//        КонецЕсли;
   КонецЦикла;
   Возврат "";
   
   Отступ="";
   Если Док.ЕстьАтрибуты() Тогда
       Атрибуты=Док.Атрибуты;
       Для каждого Стр из Атрибуты Цикл
           Сообщить(Стр.Имя+" "+Стр.Значение);
       КонецЦикла;
   КонецЕсли;
   
       Для каждого Узел из Док.ДочерниеУзлы Цикл
           Сообщить(Отступ+Узел.ТипУзла+" "+Узел.ИмяУзла);
           Если Узел.ТипУзла=ТипУзлаDOM.Элемент Тогда
               ВывестиУзелДом(Узел,Отступ+" ")
           ИначеЕсли Узел.ТипУзла=ТипУзлаDOM.Текст Тогда
               
           Иначе
               Сообщить("Не найден узел "+Узел.ТипУзла);
           КонецЕсли;
           Сообщить(Отступ+"КонецУзла"+" "+Узел.ИмяУзла);
       КонецЦикла;
       
КонецФункции
9 Serginio1
 
17.04.12
12:39
Но там есть проблемы с ПолучитьЭлементыПоИмени
v8: Неправильно работает ДокументDOM.ПолучитьЭлементыПоИмени
10 Помогите
 
17.04.12
13:02
Serginio1, то что надо, спасибо!
11 Serginio1
 
17.04.12
13:07
На здоровье!