|
v7: Чтение атрибута XML подскажите где ошибка | ☑ | ||
---|---|---|---|---|
0
Gavrinev
14.10.11
✎
11:19
|
Нашел код для чтения атрибута xml, но он неработает, а сам с xml никогда дела не имел, может кто подскажет, где ошибка, или откуда копать...
[code] Процедура ПриОткрытии() Перем ТК; Перем ДОМ,Узел,ТекЭлем; ТК=ФС.ТекКаталог(); Попытка ДОМ=СоздатьОбъект("MSXML.DOMDocument"); Узел=ДОМ.CreateProcessingInstruction("xml","version=""1.0"" encoding=""windows-1251"""); Исключение Сообщить("Не удалось создать объект DOMDocument","!"); Возврат; КонецПопытки; ДОМ.open(Строка(ТК)+Строка("\Opisan\OP.xml")); ОПП=ТекЭлем.GetAttribute("Элемент" + СокрЛП(Код)); КонецПроцедуры [/code] |
|||
1
skunk
14.10.11
✎
11:20
|
и где тут чтение аттрибута?
|
|||
2
Ёпрст
14.10.11
✎
11:21
|
(0) олё и как ты GetAttribute собрался брать у пустой переменной ТекЭлем ???
|
|||
3
mishaPH
14.10.11
✎
11:22
|
(0) заюзай v7+ и не парь себе мозг
|
|||
4
andrewks
14.10.11
✎
11:24
|
(3) -100
|
|||
5
andrewks
14.10.11
✎
11:24
|
(2)+1
|
|||
6
zladenuw
14.10.11
✎
11:25
|
ДокXML = CreateObject(мТипXMLБибилиотеки);
ДокXML.Load(мКаталогДанных + лПолноеИмяФайлаЗагрузки); Попытка group = ДокXML.selectSingleNode("documents"); Исключение Возврат; КонецПопытки; Попытка preorders = group.selectSingleNode("preorders").childNodes(); Исключение Возврат 0; КонецПопытки; Для р = 0 По preorders.Length() - 1 Цикл preorder = preorders.Item(р); ----- получаем реквизит ПолучитьРеквизит(preorder, "реквизит"); Функция ПолучитьРеквизит(section, пИмяРеквизита) Попытка лРезультат = СокрЛП(section.SelectSingleNode(пИмяРеквизита).text); Если Нрег(лРезультат) = "true" Тогда лРезультат = 1; ИначеЕсли Нрег(лРезультат) = "false" Тогда лРезультат = 0; КонецЕсли; Исключение лРезультат = ПолучитьПустоеЗначение(); КонецПопытки; Возврат лРезультат; КонецФункции //ПолучитьРеквизит() |
|||
7
zladenuw
14.10.11
✎
11:25
|
думаю разберешся
|
|||
8
Gavrinev
14.10.11
✎
11:25
|
я ж написал что xml незнаю, думал что строка
ОПП=ТекЭлем.GetAttribute("Элемент" + СокрЛП(Код)); это делает |
|||
9
zladenuw
14.10.11
✎
11:26
|
ну для полного феншуя
Функция ПолучитьТипXMLБибилиотеки() мТипXMLБибилиотеки = ""; лСЗнТипыXML = СоздатьОбъект("СписокЗначений"); лСЗнТипыXML.ДобавитьЗначение("MSXML2.DOMDocument.4.0"); лСЗнТипыXML.ДобавитьЗначение("MSXML2.DOMDocument"); Для р = 1 По лСЗнТипыXML.РазмерСписка() Цикл лТипXMLБибилиотеки = лСЗнТипыXML.ПолучитьЗначение(р); Попытка лТестовыйXML = CreateObject(лТипXMLБибилиотеки); Исключение Продолжить; КонецПопытки; мТипXMLБибилиотеки = лТипXMLБибилиотеки; Прервать; КонецЦикла; Возврат мТипXMLБибилиотеки; КонецФункции //ПолучитьТипXMLБибилиотеки() |
|||
10
andrewks
14.10.11
✎
11:26
|
(8) она и делает.
но ей как бы входные данные нужны |
|||
11
Gavrinev
14.10.11
✎
11:26
|
(6) огромное спасибо, буду разбиратся...
|
|||
12
Gavrinev
14.10.11
✎
11:28
|
(10) а ошибка на
ДОМ.open(Строка(ТК)+Строка("\Opisan\OP.xml")); т.е. перед опен еще чето надо указать? |
|||
13
zladenuw
14.10.11
✎
11:29
|
не открыть а загрузить
|
|||
14
Gavrinev
14.10.11
✎
11:30
|
(13) ну да, спасибо...
|
|||
15
zladenuw
14.10.11
✎
11:30
|
||||
16
zladenuw
14.10.11
✎
11:32
|
тут методы и свойства объекта MXML который создаешь в 1с. можно и 1с, но я так не умею :)
|
|||
17
andrewks
14.10.11
✎
13:31
|
Функция ВывестиЭлем(ТекЭлем,Знач Смещ);
Рез=1; Попытка Если (ТекЭлем.nodeType=1) Тогда Сообщить(Смещ+"Элемент "+ТекЭлем.nodeName+":","!"); ИначеЕсли (ТекЭлем.nodeType=3) Тогда Сообщить(Смещ+"Текст элемента: "+ТекЭлем.nodeValue); ИначеЕсли (ТекЭлем.nodeType=4) Тогда Сообщить(Смещ+"CDATA: "+ТекЭлем.nodeValue); ИначеЕсли (ТекЭлем.nodeType=8) Тогда Сообщить(Смещ+"Комментарий: "+ТекЭлем.nodeValue,"I"); Иначе Сообщить(Смещ+"Элемент "+ТекЭлем.nodeName+":"); Сообщить(Смещ+"Тип: "+ТекЭлем.nodeType); КонецЕсли; Для ном=0 По ТекЭлем.attributes.length-1 Цикл ТекАтр=ТекЭлем.attributes(ном); Сообщить(Смещ+"Атрибут: "+ТекАтр.nodeName+", значение: "+ТекАтр.nodeValue); КонецЦикла; Исключение Рез=0; КонецПопытки; Смещ=Смещ+" "; Для ном=0 По ТекЭлем.childNodes.length-1 Цикл ДочЭлем=ТекЭлем.childNodes(ном); Рез=Рез*ВывестиЭлем(ДочЭлем,Смещ); КонецЦикла; Возврат Рез; КонецФункции //******************************************* Функция Сформировать() ИмяФайла="D:\1.xml"; Попытка ДОМ=СоздатьОбъект("MSXML.DOMDocument"); Узел=ДОМ.CreateProcessingInstruction("xml","version=""1.0"" encoding=""windows-1251"""); Исключение Сообщить("Не удалось создать объект DOMDocument","!"); Возврат 0; КонецПопытки; ДОМ.insertBefore(Узел,); ТекЭлем=ДОМ.appendChild(ДОМ.createElement("Файл")); Текст=ДОМ.createTextNode("Здесь содержимое Файл"); ТекЭлем.appendChild(Текст); ТекЭлем.setAttribute("Атрибут_Файл_1","Здесь содержимое Атрибут_Файл_1"); Комм=ДОМ.createComment("Далее следует содержимое файла"); ТекЭлем.appendChild(Комм); ТекЭлем=ТекЭлем.appendChild(ДОМ.createElement("СодержимоеФайла")); Текст=ДОМ.createTextNode("Здесь содержимое СодержимоеФайла"); ТекЭлем.appendChild(Текст); ТекЭлем.setAttribute("Атрибут_СодержимоеФайла_1","Здесь содержимое Атрибут_СодержимоеФайла_1"); Текст=ДОМ.createCDATASection("Это секция CDATA"); ТекЭлем.appendChild(Текст); ДОМ.save(ИмяФайла); Попытка ДОМ=СоздатьОбъект("MSXML.DOMDocument"); Исключение Сообщить("Не удалось создать объект DOMDocument","!"); Возврат 0; КонецПопытки; ДОМ.async=0; ДОМ.validateOnParse=-1; ДОМ.resolveExternals=-1; ДОМ.load(ИмяФайла); Если (ДОМ.parseError.errorCode<>0) Тогда // ошибки при проверке валидности Сообщить("При проверке валидности файла "+ИмяФайла+" выявлены ошибки!","!"); Возврат 0; КонецЕсли; Рут=ДОМ.documentElement(); Смещ=""; Рез=ВывестиЭлем(Рут,Смещ); Возврат Рез; КонецФункции |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |