Имя: Пароль:
1C
 
как загрузить xml документ?
0 LivingStar
 
11.05.10
08:50
имея вот такую структуру в интернете по ссылке:
|
<doc-root>
<doc-info company="ЦФТ">
<description>
Тестовый XML документ для загрузки в 1С. Требуется отобразить на форме заголовок документа (doc-info/@company и doc-info/description), а также (в виде иерархического списка treeview) пункты документа (items).
</description>
</doc-info>
<items>
<item name="Пункт 1">
<item name="Пункт 1.1"/>
<item name="Пункт 1.2">
<item name="Пункт 1.2.1"/>
</item>
</item>
<item name="Пункт 2"/>
<item name="Пункт 3"/>
</items>
</doc-root>
|
как можно получить к ней доступ и загрузить, вывести на форму текст и пункты в древовидном порядке?
1 Asmody
 
11.05.10
09:07
если оно есть "в интернете", то доступ к ней ты почти получил. скачивай по url через ИнтернетСоединение, разбирай через ЧтениеXML и в дерево выводи
2 quest
 
11.05.10
09:10
А если есть схема - то юзай XDTO
3 LivingStar
 
11.05.10
09:13
(2) скорее всего, я так понял надо считывать прямо с инета по ссылке...
4 LivingStar
 
11.05.10
10:20
(1) а структуру файла описанную в (0) как прочитать?
5 LivingStar
 
11.05.10
10:23
пробовал примерно так

  ВнДокумент=Новый ЧтениеXML;
  ВнДокумент.ОткрытьФайл("http://www.faktura.ru/files/tmp/1c.xml");
  Пока ВнДокумент.Прочитать() Цикл
      ИмяУзла = ВнДокумент.ЛокальноеИмя;
      ТипУзла = ВнДокумент.ТипУзла;
      ОбработкаПрерыванияПользователя();
      Сообщить(ИмяУзла);
  КонецЦикла;

вылезла фатальная ошибка....
{Форма.Форма(5)}: Ошибка при вызове метода контекста (Прочитать): Ошибка разбора XML:  - [1,1]
Фатальная ошибка:
Invalid document structure SystemId: http://www.faktura.ru/files/tmp/1c.xml
  Пока ВнДокумент.Прочитать() Цикл
по причине:
Ошибка разбора XML:  - [1,1]
Фатальная ошибка:
Invalid document structure SystemId: http://www.faktura.ru/files/tmp/1c.xml
6 Asmody
 
11.05.10
10:41
(5) я бы поостерегся открывать файл прямо из Инета. возьми HTTPСоединение, получи локальную копию файла, а потом уже разбирай
7 LivingStar
 
11.05.10
10:55
(6) ну а если нужно с инета?
8 LivingStar
 
11.05.10
11:36
как получить значение, - name="Пункт 1
9 Asmody
 
11.05.10
11:39
(8) ПолучитьАтрибут("name")
10 LivingStar
 
11.05.10
11:40
ВнДокумент.ПолучитьАтрибут("name") пишет неопределено
11 Moriarti
 
11.05.10
11:59
А что-то мне не понравился 1с-кий парсер XML, я штатный от MS использовал:

function GetValue(Node, NodeName)
   for i = 0 to Node.childNodes.length-1 do
       if Node.childNodes.item(i).NodeName = NodeName then
           return Node.childNodes.item(i).Text;
       Endif;    
   EndDo;    
EndFunction    

xmlDoc = Новый COMОбъект("Microsoft.XMLDOM");
xmlDoc.Load(TempDir+"\GetList.xml");
RootNode = xmlDoc.DocumentElement;

for i = 0 to RootNode.ChildNodes.length - 1 do
   Node = RootNode.ChildNodes.item(i);
   if Node.NodeName = "Филиал" then
           Сообщить(GetValue(Node, "Филиал"));
   EndIf;    
enddo;
12 LivingStar
 
11.05.10
12:08
(11) ну я не такой асс
хотелось бы понимание, почему (9) не работает ((((
13 Moriarti
 
11.05.10
12:13
Из
А.П. Габец, Д.И. Гончаров
1С:Предприятие 8.0. Простые примеры разработки


Как можно загрузить XML документ произвольной структуры?

Чтение = Новый ЧтениеXML;
Чтение.ОткрытьФайл(ПутьКФайлу);

Пока Чтение.Прочитать() Цикл

   // Прочитать "структурные части" элементов.
   // Проверить, какая часть элемента - текущая.
   Если Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
       ИмяУзла = Чтение.Имя; Сообщить("--" + ИмяУзла);

       // Атрибуты элементов можно читать только если текущая часть -
       // начало элемента
       Пока Чтение.ПрочитатьАтрибут() Цикл

           // Прочитать данные узла атрибута.
           ТипУзла = Чтение.ТипУзла;
           Имя = Чтение.Имя;
           Значение = Чтение.Значение;

           // Обработать полученные значения.

       КонецЦикла;

   ИначеЕсли Чтение.ТипУзла = ТипУзлаXML.Текст Тогда

       // В примере просто выводим текст в окно сообщений.
       Сообщить("Текст:" + Чтение.Значение);

   ИначеЕсли Чтение.ТипУзла = ТипУзлаXML.КонецЭлемента Тогда

       // В примере просто выводим признак конца элемента
       // в окно сообщений Сообщить("--Конец:" + Чтение.Имя);

   КонецЕсли;

КонецЦикла;
14 Ленинград
 
11.05.10
12:16
...
15 LivingStar
 
11.05.10
14:16
а как лучше вывести пункты на форму в древовидном порядке?
16 LivingStar
 
11.05.10
15:10
как можно вот это вывести в древовидном порядке? чем оперировать? как определять какая подветвь, ветвь?

<items>
<item name="Пункт 1">
<item name="Пункт 1.1"/>
<item name="Пункт 1.2">
<item name="Пункт 1.2.1"/>
</item>
</item>
<item name="Пункт 2"/>
<item name="Пункт 3"/>
</items>
17 LivingStar
 
11.05.10
15:21
вывожу как текст..... строку переносить думаю есть функция...
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн