|
Разбор xpath 1c | ☑ | ||
---|---|---|---|---|
0
yyyuuu
30.09.21
✎
10:17
|
Всем привет ребята. Вопрос. Хочу разобрать [URL=https://dropmefiles.com/kHZA4]XML[/URL]
[CODE]Если ЭлементgetInvoiceReplyВагон <> Неопределено Тогда[/CODE] Тут сразу получаю Неопределено Весь код [CODE] ЧтениеХМЛ = новый ЧтениеXML; ЧтениеХМЛ.УстановитьСтроку(Ответ); ПостроительDOM = Новый ПостроительDOM; ДокументDOM = ПостроительDOM.Прочитать(ЧтениеХМЛ); РезультатРазборки = Новый Массив; Разименователь = Новый РазыменовательПространствИменDOM(ДокументDOM); РезультатgetInvoiceReply = ДокументDOM.ВычислитьВыражениеXPath("getInvoiceReply",ДокументDOM.ЭлементДокумента,Разименователь); Пока Истина Цикл // ЭлементgetInvoiceReply = РезультатgetInvoiceReply.ПолучитьСледующий(); Если ЭлементgetInvoiceReply = Неопределено Тогда Прервать; КонецЕсли; InvoiceReply = Новый Структура("carNumber,Tariff,Грузополучатель"); ЭлементgetInvoiceReplyВагон = ДокументDOM.ВычислитьВыражениеXPath ("carNumber",ЭлементgetInvoiceReply,Разименователь).ПолучитьСледующий(); Если ЭлементgetInvoiceReplyВагон <> Неопределено Тогда // InvoiceReply.carNumber = ЭлементgetInvoiceReplyВагон; // КонецЕсли; // КонецЦикла; [/CODE] Что Я делаю не так? |
|||
1
Kassern
30.09.21
✎
10:24
|
(0) в переменной Ответ у вас что?
|
|||
2
yyyuuu
30.09.21
✎
10:26
|
(1)сам текст XML
|
|||
3
Kassern
30.09.21
✎
10:33
|
(0) ну так ошибка то какая в чем проблема?
|
|||
4
youalex
30.09.21
✎
10:33
|
у меня вот так находит:
getInvoiceReply/invCar/carNumber |
|||
5
yyyuuu
30.09.21
✎
10:34
|
(3)
Ошибок нет, не читает нехрена. |
|||
6
Kassern
30.09.21
✎
10:34
|
СП: Если выражение XPath содержит ошибки или в процессе вычисления выражения не удалось разыменовать префикс пространства имен, то будет вызвано исключение.
|
|||
7
youalex
30.09.21
✎
10:35
|
invCar еще узел в модели.
|
|||
8
yyyuuu
30.09.21
✎
10:35
|
(4) Странно у Меня нет. А если из тега getInvoiceReply хочу получить значение?
|
|||
9
youalex
30.09.21
✎
10:36
|
(8) так ты можешь сразу нужный путь указать к нужным элементам, из контекста ДокументDOM
|
|||
10
yyyuuu
30.09.21
✎
10:41
|
(9)
РезультатgetInvoiceReply = ДокументDOM.ВычислитьВыражениеXPath("getInvoiceReply",ДокументDOM.ЭлементДокумента,Разименователь); ЭлементgetInvoiceReply = РезультатgetInvoiceReply.ПолучитьСледующий(); ЭлементgetInvoiceReplyВагон = ДокументDOM.ВычислитьВыражениеXPath ("getInvoiceReply",ЭлементgetInvoiceReply,Разименователь).ПолучитьСледующий(); Если ЭлементgetInvoiceReplyВагон <> Неопределено Тогда // InvoiceReply.carNumber = ЭлементgetInvoiceReplyВагон; // КонецЕсли; Не работает. И ошибок нету. И доступа к элементам |
|||
11
yyyuuu
30.09.21
✎
10:42
|
РезультатgetInvoiceReply = ДокументDOM.ВычислитьВыражениеXPath("getInvoiceReply",ДокументDOM.ЭлементДокумента,Разименователь);
ЭлементgetInvoiceReply = РезультатgetInvoiceReply.ПолучитьСледующий(); Если ЭлементgetInvoiceReply = Неопределено Тогда Прервать; КонецЕсли; Делаю проверку на неопределенно, чтобы выйти из цикла. Сюда сразу падает неопределенно |
|||
12
Kassern
30.09.21
✎
10:45
|
(0) а зачем так в цикле обходить с прерыванием? Почему нельзя напрямую обратиться к массиву и обойти все его элементы?
|
|||
13
youalex
30.09.21
✎
10:45
|
СтрокаЗапроса = "/getInvoiceReply/invCar/carNumber";
Результат = документДОМ.ВычислитьВыражениеXPath(СтрокаЗапроса, документДОМ, Новый РазыменовательПространствИменDOM(документДОМ)); |
|||
14
yyyuuu
30.09.21
✎
10:46
|
(12) проблема в нехватке знаний. Знаю как вот так делать. Если есть пример, поделись
|
|||
15
Kassern
30.09.21
✎
10:57
|
(14) можно в дерево значений загнать XML, а потом удобно читать, можно еще проще через фабрику сделать как например тут: https://infostart.ru/public/311011/
Там пример с ФабрикаXDTO.ПрочитатьXML(); |
|||
16
yyyuuu
30.09.21
✎
10:59
|
(15)Да Я видел. Но хотел через xpath попробовать. Не могу найти примеров, все как по учебнику делаю а все ровно не получаю доступ к тегам после getInvoiceReply
|
|||
17
youalex
30.09.21
✎
11:01
|
(16) (13) попробуй
|
|||
18
yyyuuu
30.09.21
✎
12:34
|
(17) Результат пустой.
|
|||
19
eklmn
гуру
30.09.21
✎
14:17
|
нипанятно что ты хочешь, но закину сюда результат, а там думай дальше
https://cdn1.savepice.ru/uploads/2021/9/30/501d512e73a19c4b282dcf2d07242a12-full.png |
|||
20
yyyuuu
05.10.21
✎
05:31
|
(19)
Я вобще хочу разобрать то что в тегах -<getInvoiceReply> и +<invCar> |
|||
21
yyyuuu
06.10.21
✎
03:50
|
Вроде разобрался с getInvoiceReply а как перебрать узлы <invCar> их от 4 до 5 бывает
|
|||
22
yyyuuu
06.10.21
✎
04:18
|
РезультатgetInvCar = ДокументDOM.ВычислитьВыражениеXPath("//getInvoiceReply/invCar",ДокументDOM.ЭлементДокумента,Разименователь);
ЭлементInvCar = РезультатgetInvCar.ПолучитьСледующий(); ЭлементgetInvoiceReplyНомВаг = ДокументDOM.ВычислитьВыражениеXPath ("//carNumber",ЭлементInvCar,Разименователь).ПолучитьСледующий(); ЭлементgetInvoiceReplyНомВаг = ДокументDOM.ВычислитьВыражениеXPath ("//getInvoiceReply/invCar/*",ЭлементInvCar,Разименователь).ПолучитьСледующий(); Пока ЭлементgetInvoiceReplyНомВаг <> Неопределено Цикл // ЭлементgetInvoiceReplyНомВаг = ДокументDOM.ВычислитьВыражениеXPath ("//getInvoiceReply/invCar/carNumber",ЭлементInvCar,Разименователь).ПолучитьСледующий(); InvoiceReply.invNumber = ЭлементgetInvoiceReplyНомВаг.ПолучитьАтрибут("value"); Сообщить(InvoiceReply.invNumber); ч = ч +1; Если ч>7 Тогда прервать; КонецЕсли; // КонецЦикла; Пробую так перебать <invCar> их от 1-20 может быть. НЕ работает, попадаю всегда только на первый элемент первого тега <invCar> |
|||
23
yyyuuu
06.10.21
✎
04:56
|
ЭлементЭлементgetInvoiceReply= ДокументDOM.ВычислитьВыражениеXPath("/getInvoiceReply",ДокументDOM.ЭлементДокумента,Разименователь);
Если ЭлементЭлементgetInvoiceReply <> Неопределено тогда Пока Истина Цикл // InvoiceReply.invCar = Новый Массив; РезультатПоискgetInvoiceReply_invCar = ДокументDOM.ВычислитьВыражениеXPath("/invCar",ЭлементЭлементgetInvoiceReply,Разименователь); Пока Истина Цикл // Элемент_InvoiceReply_invCar = РезультатПоискgetInvoiceReply_invCar.ПолучитьСледующий(); Если Элемент_InvoiceReply_invCar = Неопределено Тогда Прервать; КонецЕсли; Строка_invCar = Новый Структура("сarNumber"); Элемент_InvoiceReply_invCar_invCarNumber = ДокументDOM.ВычислитьВыражениеXPath("/carNumber",Элемент_InvoiceReply_invCar,Разименователь); Если Элемент_InvoiceReply_invCar_invCarNumber <> Неопределено Тогда Строка_invCar.сarNumber = Элемент_InvoiceReply_invCar_invCarNumber.ПолучитьАтрибут("value"); КонецЕсли; // КонецЦикла; // КонецЦикла; КонецЕсли; Ошибка по причине: {ВнешняяОбработка.РазборХМЛ.МодульОбъекта(161)}: Ошибка при вызове метода контекста (ВычислитьВыражениеXPath) по причине: Несоответствие типов (параметр номер '2') |
|||
24
yyyuuu
06.10.21
✎
08:14
|
(19) спасибо
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |