Имя: Пароль:
1C
1С v8
Подскажите как лучше считать такой блок из XML
0 Невский Александр
 
27.04.12
16:21
Подскажите как лучше считать такой блок из XML

<products>
<product id="64">
<price>
950
</price>
<name>
Набор фишек FT100
</name>
<IsDeleted>
False
</IsDeleted>
</product>
<product id="1130">
<price>
0
</price>
<name>

Есть ли еще варианты, кроме как

Файл = Новый ЧтениеXML;
Файл.ОткрытьФайл(ИмяФайлаДанных);
Пока Файл.Прочитать() Цикл

Если Файл.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
Если Файл.Имя = "product" Тогда
           Пока Файл.ПрочитатьАтрибут() Цикл                
               НовСтрока = ТаблицаНоменклатуры.Добавить();            
               НовСтрока.Код =  Файл.Значение;
           КонецЦикла;
           
       ИначеЕсли Файл.Имя = "price" Тогда
               Пока Файл.ПрочитатьАтрибут() Цикл
                   НовСтрока.Цена = Файл.Значение;
               КонецЦикла;
       ИначеЕсли Файл.Имя = "name" Тогда
                   НовСтрока.Наименование = Файл.Значение;
       ИначеЕсли Файл.Имя = "IsDeleted" Тогда
                   НовСтрока.ПометкаУдаления = Файл.Значение;
           КонецЕсли;    
КонецЕсли;
1 izekia
 
27.04.12
16:22
выбрать элементы, какой-то такой метод в 1С есть, и там запрос, но это через дом
2 Fragster
 
гуру
27.04.12
16:23
через фабрику XDTO, не?
3 Невский Александр
 
27.04.12
16:23
нужно считать в таблицу значений - блок неудобен тем, что идет не одной строкой, а разбит на подчиненный узлы, да и в том виде, как я считываю, почему-то видны только коды, все остальные значения - не считываются, даже если я ставлю ПрочитатьАтрибут
4 Невский Александр
 
27.04.12
16:24
может у кого кусок кода есть для примера
5 Невский Александр
 
27.04.12
16:25
и в файле несколько секций, в других идет все одной строкой, а в этой - по номенклатуре - именно так
6 Axel2009
 
27.04.12
16:26
(3) потому что это стоит Если Файл.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
7 х86
 
27.04.12
16:30
Процедура ЗагрузитьДанные()
   
   ТаблЗагрузки.Очистить();

   ЧтениеХМЛ = Новый ЧтениеXML;
   Попытка
       ЧтениеХМЛ.ОткрытьФайл(ПутьВыгрузки);
   Исключение
       Сообщить("Ошибка открытия файла по причине:" + Символы.ПС + "    " + ОписаниеОшибки());
       Возврат;
   КонецПопытки;
   
   ЧтениеХМЛ.Прочитать();// Прочитать Реализации
   
   Пока ЧтениеХМЛ.Прочитать() Цикл
       
       Если (ЧтениеХМЛ.ТипУзла = ТипУзлаXML.НачалоЭлемента) и (ЧтениеХМЛ.Имя = "Реализация") Тогда
           ПрочитатьСтрокуРеализации(ЧтениеХМЛ, ТаблЗагрузки.Добавить(), ЧтениеХМЛ.ПолучитьАтрибут("Ссылка"));
       КонецЕсли;
       
   КонецЦикла;
   
   ЧтениеХМЛ.Закрыть();

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

Процедура ПрочитатьСтрокуРеализации(ЧтениеХМЛ, СтрокаТаблЗагрузки, ЗначениеСсылки)

   СтрокаТаблЗагрузки.Ссылка = ЗначениеСсылки;
   
   Пока ЧтениеХМЛ.Прочитать() Цикл
   
       Если (ЧтениеХМЛ.ТипУзла = ТипУзлаXML.КонецЭлемента) и (ЧтениеХМЛ.Имя = "Реализация") Тогда
           Возврат;
       КонецЕсли;
       
       ИмяКолонки = "";
       Если ЧтениеХМЛ.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
       
           ИмяКолонки = ЧтениеХМЛ.Имя;
           
           Если ЧтениеХМЛ.Прочитать() Тогда
               Если ТаблЗагрузки.Колонки.Найти(ИмяКолонки) = Неопределено Тогда
                   ТаблЗагрузки.Колонки.Добавить(ИмяКолонки);
               КонецЕсли;
               СтрокаТаблЗагрузки[ИмяКолонки] = ЧтениеХМЛ.Значение;
           КонецЕсли;
       
       КонецЕсли;
   
   КонецЦикла;

КонецПроцедуры
8 izekia
 
27.04.12
16:30
да не, потому что он считывает атрибуты, а надо подчиненные элементы
9 х86
 
27.04.12
16:35
(7)+
<?xml version="1.0" encoding="UTF-8" ?>
- <Реализации>
- <Реализация Ссылка="Реализация товаров и услуг х/х/120403/00001 от 03.04.2012 9:23:41">
 <Дата>03.04.2012</Дата>
 <Номер>х/х/120403/00001</Номер>
 <СуммаДокумента>60027,00</СуммаДокумента>
 <Контрагент>ххх ООО</Контрагент>
 <КонтрагентИНН>хххх59971</КонтрагентИНН>
 <КонтрагентЮрФизЛицо>Юр. лицо</КонтрагентЮрФизЛицо>
 <ДоговорКонтрагента>Д12/П/0131</ДоговорКонтрагента>
 <ДатаДоговора>06.02.2012</ДатаДоговора>
 <Ответственный>ххх Елена Евгеньевна</Ответственный>
 <Склад>Заказ</Склад>
 <НомерСчетФактуры>х/х/120403/00001</НомерСчетФактуры>
 <ДатаСчетФактуры>03.04.2012</ДатаСчетФактуры>
 <НомерПлатежноРасчетногоДокумента>246</НомерПлатежноРасчетногоДокумента>
 <ДатаПлатежноРасчетногоДокумента>05.03.2012</ДатаПлатежноРасчетногоДокумента>
 <Документ />
 </Реализация>
- <Реализация Ссылка="Реализация товаров и услуг х/х/120403/00002 от 03.04.2012 9:38:15">
 <Дата>03.04.2012</Дата>
 <Номер>х/х/120403/00002</Номер>
 <СуммаДокумента>685010,00</СуммаДокумента>
 <Контрагент>хххян С.А. ИП</Контрагент>
 <КонтрагентИНН>хххх184775</КонтрагентИНН>