#0
by MWWRuza
Такая конструкция: Получаю коллекцию пространств имен, из пяти элементов: XML_DOM.Namespaces.Length = 5 По индексу получаю URL пространства имен: Ns = "; Вопрос - как получить из этой коллекции префикс для этого пространства имен - ??? Ни один метод не работает, возвращает ошибку... Это вообще, возможно?
#1
by big
nodeName Содержит полное имя данного узла, включая префикс пространства имён. Только чтение. baseName Содержит имя данного узла без префикса пространства имён. Только чтение. prefix Содержит префикс (пространства имён) имени данного узла. Только чтение.
#2
by MWWRuza
Это я понимаю, и постоянно использую... Только в моем вопросе, "Namespaces" это не узел, это пространство имен - я толком не пойму, что это с точки зрения доступа к нему(свойство, атрибут или еще что-то - ???). Объясню подробнее. Во всей своей конфе, я во многих местах парсю XML используя: XML_DOM.selectSingleNode("./"префикс":"ИмяУзла"). Нет проблем, все работает отлично, пока какой-нибудь "извращенец", от которого я получаю XML, не использует свое, произвольно им придуманное имя префикса, отличное от стандартного. Ладно, не проблема, он его по любому, по правилам XML, объявляет в начале файла, в месте, где объявляется пространство имен. Не вопрос, написал функцию, которая вытаскивает пространства имен вместе с префиксами из атрибута корневого узла "Documents", помещает в таблицу, где путем сравнивания по URL пространства имен, получает таблицу соответствия "стандартного" и "извращенного" префикса. Из нее, я получаю нужные мне имена префиксов для парсинга DOMа, с нестандартными префиксами. Все работает, УРА!!! Я уже обрадовался... Но, тут оказалось, что некоторые "издатели" XML, решили поиздеваться еще дальше... Объявляют в начале XML, как атрибут корневого узла "Dokuments", не все NS, а только часть из них(2 первых). Дальнейшее объявление NS идет в теле XML, перед их использованием... В принципе, не запрещено... Но, я то их пытаюсь получить из атрибутов корневого узла!(а их там нет...). Я уже собрался писать функцию, которая распарсит весь XML, выберет из него все атрибуты с именем "xmlns", со всех строк, где они есть, поместит в ТЗ, свернет, и далее как всегда... Но, наткнулся на (свойство? функцию?) "Namespaces", которая возвращает коллекцию пространств имен... При этом, сами пространства, в виде URL, я получаюиз нее по индексу - XML_DOM.Namespaces(IndNs - 1), но мне этого не достаточно - мне еще нужен префикс... Как его получить?
#3
by MWWRuza
В общем, не получилось ничего "малой кровью"... Пришлось решить задачу "в лоб". Сначала, с помощью рекурсивной процедуры пробегаю по всей XML, получаю из нее пространства имен для всех узлов(отдельно префиксы и URL), выгружаю в таблицу, сворачиваю, что-бы не было лишних одинаковых строк. Получаю из XML описания все пространства имен со стандартными префиксами. В первую таблицу дописываю стандартные префиксы из второй(сопоставляю по URL NS), и после, уже как обычно - там, где в тексте программы, мне нужно получить доступ к узлу с нестандартным префиксом, я специальной функцией получаю его из этой таблицы, по "стандартному", который ожидался на этом месте. Получилась очень универсальная процедура чтения ЕГАИС-овских XML, которой пофигу все извращения их создателей, глотает все, независимо от префиксов с мест объявления NS - хоть только в начале все, хоть перед каждой строкой... Все работает отлично, но осталось какое-то ощущение, что можно было проще сделать, но, как не знаю...
Тэги: 1С 7.7 и ранее
Ответить:
Комментарии доступны только авторизированным пользователям
Похожие вопросы 1С
- Работа из 1С с Excel (да и вообще работа через OLE)
- v7: v7 : НДС при возврате
- v7: Что нужно чтоб подключить ККМ Меркурий 112F к 1с V7 Торговля + склад
- v7: v7.7 премещение элемента справочника
- v7: v8: v7: Кто-нибудь сумел скачать комплект отчетности за I квартал 2007 года
- v7: работа с HTTPS и бинарными данными с помощью MSXML.XMLHTTP
- Не могу из v7 подключиться v7 к через OLE
- v7: 1С V7.7 в сети
- v7: 1C:V7 starter program (for SQL) - обнаружена ошибка
- v7: Работа с MS SQL через ADO
- v7: Помогите с компонентой V7 plus работа с XML
- v7: Перенос данных Бухгалтерия из v7 в v8
В этой группе 1С
- Есть ли смысл покупать комп с процом i7 или достаточно i5?
- Веб-сервер под IIS
- Запись данных в справочник НОМЕНКЛАТУРА
- Синтаксическая ошибка "ПОМЕСТИТЬ"
- Mikrotik подключение модема. Пинг есть, интернета нет.
- заблокированны поля редактирования констант
- Программное сравнение табличных документов. Как вывести список различий?
- Как скоро 1с типовые на 8.3.11 переведет?
- ЗУП 3.1 Обмен с банком по зарплатным проектам
- Обход результата запроса, через "ADODB.Connection" долго работает
- Перевод ЗУП 2.5 в ЗУП 3.1
- УФ. Как заставить платформу запоминать ширину колонок при изменении видимости колонки?
- Как сделать активным элемент формы по кнопке enter
- СКД. Вывод реквизита группы справочника в иерархии справочника напротив групп.
- Программное открытие кассовой смены
- Версия ДТО и обработки АТОЛ
- 1С8 Внешнее и внутреннее совместительство. И ЗУП 2.5
- 1C8 Создание отчета Анализ счета
- Бух 3.0. Как сделать корректировку регистра накопления?
- УТ 11 штрихкодирование документов