Имя: Пароль:
1C
 
Как в 8-ке считывать XML - файл
0 fixin
 
16.02.05
18:12
Я попробовал    
       ВнДокумент=Новый ЧтениеXML;
   ВнДокумент.ОткрытьФайл(ИмяФайла);
   Пока ВнДокумент.Прочитать() Цикл
       ИмяУзла = ВнДокумент.ЛокальноеИмя;
       ТипУзла = ВнДокумент.ТипУзла;
       ОбработкаПрерыванияПользователя();
       Сообщить(ИмяУзла);
   КонецЦикла;
Но этот код перебирает все узлы... А мен нужно например чтобы он перебирал внешние узлы, затем внутренние, т.е. по дереву XML
1 француз
 
16.02.05
19:47
Пока Прочить() Цикл
 ПрочитьАтрибут(нужныйАтрибут)
КОнецЦикла..
сей шаблон работает с Хмл выгрузкой из 77
2 Лошадка в пальто
 
16.02.05
19:50
(1)В Пока Прочить() Цикл ошибка... Там для фиксина нужно первую букву изменить...
3 француз
 
16.02.05
19:56
))))))
4 fixin
 
17.02.05
09:52
Не я хочу так - перебираю все узлы родительские, потом вложенный цикл по дочерним.
5 француз
 
17.02.05
10:11
какой привередливый, аднако..

Пока ПрочитатьАтрибут() цикл.
6 fixin
 
17.02.05
10:24
Блин все не то.
Есть узел
Данные знд=1
  Свойство зн=1 /Свойство
  Свойство зн=2 /Свойство
  Свойство зн=3 /Свойство
/Данные
Данные знд=2
  Свойство зн=1 /Свойство
  Свойство зн=2 /Свойство
  Свойство зн=3 /Свойство
/Данные
Как мне перебрать только узлы Данные, не спускаясь на узлы Свойство?
7 fixin
 
17.02.05
10:28
(5) Неужели он читает все узлы последовательно, не так как в В7Плюс.длл ???
Блин...
8 француз
 
17.02.05
11:13
определяйся в желаниях..
в (4) в семь хочеш последовательный доступ
в (7) произвольный..
что именно тебе нужно?
9 француз
 
17.02.05
11:14
+(8) читать в "(4) хочеш последовательный доступ"
10 fixin
 
17.02.05
11:19
Короче я хочу перебрать узлы верхнего уровня, в данном случае Данные, не тратя время на перебор узлов Свойство. Как это сделать? Или пусть тратя но как перебрать, блин.
11 fixin
 
17.02.05
14:32
Короче, я нашел, что оберток для DOM модели нет, нужно через КОМ-объект DOMDocument работать. В официальной методичке 1С.
12 француз
 
17.02.05
14:34
впечатляет..
13 fixin
 
18.02.05
18:42
Функция СоздатьОбъектXMLDOM() Экспорт
   Перем Объект;
   Попытка
       Объект=Новый COMОбъект("Msxml2.DOMDocument.4.0");
   Исключение
       Попытка
           Объект=Новый COMОбъект("Msxml2.DOMDocument.3.0");
       Исключение
           Сообщить("Ошибка при создании COM-объекта Msxml2.DOMDocument - возможно отсутствует парсер XML");
           Возврат 0;
       КонецПопытки;
   КонецПопытки;
   
   Возврат Объект;
КонецФункции



   XMLDoc=СоздатьОбъектXMLDOM();
   Если ВнДОкумент=0 Тогда
       Возврат ложь;
   КонецЕсли;
   
   ОтношенияСоздать();
   
   Если НЕ XMLDoc.Load(ИмяФайла) Тогда
       Возврат ложь;
   КонецЕсли;
   XMLDoc.SetProperty("SelectionLanguage","XPath");
   
   УзКорень=XMLDoc.DocumentElement;
   //УзОтношенияСписок=УзКорень.SelectNodes("//*[name()='Data']");
   Для ИндКор=1 По УзКорень.childNodes.Length Цикл
       УзОтношение=УзКорень.childNodes.item(ИндКор-1);
       Если УзОтношение.BaseName="Data" Тогда
           Возврат ОтношенияЗагрузить(УзОтношение);
       КонецЕсли;
   КонецЦикла;



   //Dim docXML As MSXML2.DOMDocument30
   //docXML.documentElement.childNodes(idx)
   //где idx - номер узла
   //docXML.documentElement.childNodes.length - кол-во узлов
   //начальный индекс 0
   //docXML.documentElement.childNodes(0).attributes.getNamedItem("name_attr").nodeValue
   //ХМЛ= СоздатьОбъект("MSXML2.DOMDocument");
   //ХМЛ.Load(ФайлЗагрузки);
   //ХМЛ.SetProperty("SelectionLanguage","XPath");
   //Корешок=ХМЛ.DocumentElement;
   //Справ = Корешок.SelectNodes("//*[name()='Справочник']");
   //Рек = Корешок.SelectNodes("//*[name()='Реквизит']");
   //Для к=0 По (Справ.Length - 1)   Цикл
   //  Сообщить(Справ.Item(к).GetAttribute("Наименование"));
   //   Для у=0 По (Рек.Length - 1)   Цикл
   //    Сообщить(Рек.Item(у).GetAttribute("Наименование"));
   //   КонецЦикла;
   //КонецЦикла




Короче, кому надо, в ДОМ по этому примеру разберетца. Вопрос закрыт.