Не понимаю как работает ПостроительDOM

1. antipod13 26.04.20 05:32 Сейчас в теме
вот такой код
ЧтениеXML = Новый ЧтениеXML;
    ЧтениеXML.ОткрытьФайл(ПутьКФайлу);
	
	Построитель = Новый ПостроительDOM;
    ОтветДокумент = Построитель.Прочитать(ЧтениеXML);
	
	Для Каждого Элемент0 Из ОтветДокумент.ЭлементДокумента.ДочерниеУзлы Цикл
		сообщить(Элемент0.ИмяУзла);
	КонецЦикла;
Показать

Вот такой XML файл

<?xml version="1.0" encoding="UTF-8"?>
<string xmlns="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><Body><?xml version='1.0' encoding='UTF-8'?><S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"><S:Body><ns2:ticketResponse xmlns:ns2="http://fclient.russianpost.org/postserver" xmlns:ns3="http://fclient.russianpost.org"><error ErrorTypeID="3" ErrorName="Ошибка авторизации: Превышен лимит количества запросов"/></ns2:ticketResponse></S:Body></S:Envelope></Body></string>


Сообщение "#text", я не понимаю, считывается только первый тег мне тут сказали, но первый заголовок, он не должен считываться, если считывается второй - у него имя "String". не понимаю
По теме из базы знаний
Ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. antipod13 26.04.20 10:29 Сейчас в теме
Ну подскажите третий день бьюсь
4. ivan1703 78 26.04.20 11:50 Сейчас в теме
(2) крайне непонятна что Вы передаете в ЧтениеXML? выкладывайте файл, посмотрим, ошибка точно там!
5. antipod13 26.04.20 11:52 Сейчас в теме
3. ImHunter 312 26.04.20 11:40 Сейчас в теме
Пытался этому товарищу донести методику работы.
Пока он не понял...
6. antipod13 26.04.20 11:53 Сейчас в теме
(3)Именно ее я и хочу понять, извените, что то практика расходится с теорией. Ну или я тупой
7. ImHunter 312 26.04.20 12:45 Сейчас в теме
Вот таким кодом вычитывается весь документ:
Процедура ВыполнитьТест() Экспорт
	
	Текст = ПолучитьМакет("Макет").ПолучитьТекст();
	Чтение = Новый ЧтениеXML;
	Чтение.УстановитьСтроку(Текст);
	
	Построитель = Новый ПостроительDOM;
 	КорневойУзел = Построитель.Прочитать(Чтение);
	
	ПрочитатьУзел(КорневойУзел, 0);
	
КонецПроцедуры

Процедура ПрочитатьУзел(ТекущийУзел, УровеньИерархии)
	
	Составляющие = Новый Массив;
	Для Индекс=1 По УровеньИерархии Цикл 
		Составляющие.Добавить(Символы.Таб);
	КонецЦикла;
	Составляющие.Добавить(ТекущийУзел.ИмяУзла + ?(ПустаяСтрока(ТекущийУзел.ЗначениеУзла), "", "=" + ТекущийУзел.ЗначениеУзла));
	Если ТекущийУзел.Атрибуты<>Неопределено Тогда
		Для Индекс=0 По ТекущийУзел.Атрибуты.Количество()-1 Цикл 
			Составляющие.Добавить(" [атрибут]" + ТекущийУзел.Атрибуты[Индекс].Имя + "=" + ТекущийУзел.Атрибуты[Индекс].Значение);
		КонецЦикла;
	КонецЕсли;
	Сообщить(СтрСоединить(Составляющие));
	
	Для Каждого Дочерний Из ТекущийУзел.ДочерниеУзлы Цикл
		ПрочитатьУзел(Дочерний, УровеньИерархии + 1);
	КонецЦикла;
	
КонецПроцедуры
Показать
Прикрепленные файлы:
ИС_Почта.epf
8. ImHunter 312 26.04.20 12:49 Сейчас в теме
Вообще, сам файл у тебя малость кривой. Дважды встречается "<?xml version='1.0'", такого не должно быть. Такое объявление допустимо только в самом начале.
9. antipod13 26.04.20 13:17 Сейчас в теме
(8)Сам теперь вижу отлачая, но файл я формировал с помощью этого
	ЗаписьXML = Новый ЗаписьXML;
	ЗаписьXML.ОткрытьФайл(ПутьКФайлу);
	ЗаписьXML.ЗаписатьОбъявлениеXML();
	СериализаторXDTO.ЗаписатьXML(ЗаписьXML, Ответ);
	ЗаписьXML.Закрыть(); 

а вот в прикреплнном файле я получаю текстовую строку в прикрепленном файле, если что в нем не так я не причем, это приходит с сервиса, и мне надо буде все это обработать
Прикрепленные файлы:
1.txt
10. antipod13 26.04.20 13:18 Сейчас в теме
надо начинать все с начала
11. ivan1703 78 26.04.20 14:02 Сейчас в теме
(10) крайне не понятно что Вы вообще делаете))?? какова цель Вашей задачи.
Вы читаете имя узла, выдаете сообщением и удивляетесь результату?

сообщить(Элемент0.ИмяУзла); - Имя узла #text

Вы что хотите чтобы из xml файла Вам выдавало?
12. antipod13 26.04.20 14:17 Сейчас в теме
(11)Выш файл я уже обработал, макет в примере обрабатывается на ура и моим кодом, но беда в том что я получаю судя по всему ошибочный формат текстового собщения, который преобразовываю в XML, который уже нормально не читаеться.
Если начинать с начала, мне надо наладить сообщение с сервисом Почты РФ, пока я получил только один вариант ответа, он в файле 1.txt вот его надо как то обработать, он пока простой, но мне как минимум 4 таких ответа обрабатывать, на каждый велосипед изобретать, я помру.
13. ImHunter 312 27.04.20 07:49 Сейчас в теме
(12) Зачем ты лишние финты делаешь? Вроде бы исходный файл вполне себе пригоден.
14. antipod13 27.04.20 07:50 Сейчас в теме
(13)Спасибо, я как раз над этим работаю, вроде получается
15. antipod13 27.04.20 08:12 Сейчас в теме
(13)Опять уткнулся в проблему, пытаюсь прочитать значение атрибута - пишет что метода Значение у типа АтрибутDOM нет, хотя по справке есть.

	ЧтениеXML = Новый ЧтениеXML;
    ЧтениеXML.ОткрытьФайл(ПутьКФайлу);
	
	Построитель = Новый ПостроительDOM;
    ОтветДокумент = Построитель.Прочитать(ЧтениеXML);
	
	Для Каждого Элемент0 Из ОтветДокумент.ЭлементДокумента.ДочерниеУзлы Цикл
		//сообщить(Элемент0.ИмяУзла);
		
		Если Элемент0.ИмяУзла = "S:Body" Тогда
			Если Элемент0.ПервыйДочерний.ИмяУзла = "ns2:ticketResponse" Тогда      
				ЭлементПервыйД = Элемент0.ПервыйДочерний;
				Если ЭлементПервыйД.ПервыйДочерний.ИмяУзла = "error" Тогда
					ОшибкаDOM = ЭлементПервыйД.ПервыйДочерний;
					ОшибкаАтрибут = ОшибкаDOM.Атрибуты.ПолучитьИменованныйЭлемент("ErrorName");
					ОшибкаТекст =ОшибкаАтрибут.Значение(); 
					//АтрибутDom
					Сообщить(ОшибкаТекст)
				КонецЕсли
			КонецЕсли
		КонецЕсли
	КонецЦикла;
Показать
16. ImHunter 312 27.04.20 08:20 Сейчас в теме
(15) Правильно пишет. Нет такого метода. Читай внимательнее.
Есть св-во ЗначениеУзла.
17. antipod13 27.04.20 08:22 Сейчас в теме
ой спасибо, кажеться разобрался в конце концов
Оставьте свое сообщение
Вакансии
Руководитель направления 1С
Москва
зарплата от 350 000 руб.
Полный день

1С Программист
Москва
зарплата от 180 000 руб.
Полный день

Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)

Программист 1С
Москва
зарплата от 250 000 руб.
Полный день