Помогите разобраться с xpath с выражением count(realmCode)=1 в xml тексте не отрабатывает хотя тег есть возращает ложь

1. user1620186 04.07.24 15:31 Сейчас в теме
Помогите разобраться с xpath с выражением count(realmCode)=1 в xml тексте не отрабатывает хотя тег есть возращает ложь
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. starik-2005 3166 04.07.24 18:58 Сейчас в теме
3. user1620186 04.07.24 19:22 Сейчас в теме
не работает
Прикрепленные файлы:
4. user1620186 04.07.24 19:27 Сейчас в теме
У меня есть документ в формате xml к каждому документу есть схематрон, в схематроне есть набор выражений xpath которые как раз должны проверить на правильность заполненного документа
5. user1620186 04.07.24 19:35 Сейчас в теме
(4)Причем в онлайн сервисах проверка проходит
6. user1880116 04.07.24 22:33 Сейчас в теме
У 1С весьма чудные отношения с пространствами имен и особенно с пространством имен по умолчанию.

Показывай файл.
7. user1620186 05.07.24 09:20 Сейчас в теме
8. user1880116 05.07.24 21:42 Сейчас в теме
(7)
Вот
Ну, как и предполагалось. Xpath в 1С по комплексу причин не работает в случае, если в документе одновременно задано пространство имен по умолчанию и другие пространства. Можно попробовать переопределить пространство и учесть это в своих запросах:

Чтение = Новый ЧтениеXML;
Чтение.ОткрытьФайл("F:\Текстовый документ.xml");
Чтение.ПерейтиКСодержимому();

Построитель = Новый ПостроительDOM;
Документ = Построитель.Прочитать(Чтение);

Корень = Документ.ЭлементДокумента;
Значение = Корень.ПолучитьАтрибут("http://www.w3.org/2000/xmlns/", "xmlns");
Корень.УдалитьАтрибут("http://www.w3.org/2000/xmlns/", "xmlns");
Корень.УстановитьАтрибут("http://www.w3.org/2000/xmlns/", "xmlns:default", Значение);

Разыменователь = Документ.СоздатьРазыменовательПИ();

СтрокаЗапроса = "count(default:realmCode)=1";
Результат = Документ.ВычислитьВыражениеXPath(СтрокаЗапроса, Документ, Разыменователь, ТипРезультатаDOMXPath.Булево);
Сообщить(Результат.БулевоЗначение);

СтрокаЗапроса = "count(default:realmCode)=11";
Результат = Документ.ВычислитьВыражениеXPath(СтрокаЗапроса, Документ, Разыменователь, ТипРезультатаDOMXPath.Булево);
Сообщить(Результат.БулевоЗначение);
Показать
Вместо синтетического префикса "default", естественно, можно придумать что-нибудь своё.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот