![]() |
![]() |
![]() |
|
как загрузить 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
|
вывожу как текст..... строку переносить думаю есть функция...
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |