|
0 / 0 / 0
Регистрация: 23.03.2012
Сообщений: 8
|
|||||||||||
Пространства имен в XML23.03.2012, 11:24. Показов 5325. Ответов 10
Метки нет (Все метки)
Друзья! Доброе утро! Прошу помощи
Есть XML-файл, примерно следующего вида:
Есть перечень полей, из которых мне надо считать значения, примерно такой: /ns0:StandardBusinessDocument/ns0:StandardBusinessDocumentHeader/ns0:HeaderVersion /ns0:StandardBusinessDocument/ns0:StandardBusinessDocumentHeader/ns0:Sender/ns0:Identifier /ns0:StandardBusinessDocument/ns0:StandardBusinessDocumentHeader/ns0:Sender/ns0:Identifier/@Authority Эти адреса помещены в столбец эксельки от 1 до 38 - как комментарий к коду ниже. Есть код на VBA, который считывает адрес поля, находит его и выводит мне значение в этом поле. А проблема в том, что код не хочет работать с пространствами имен. Выдает ошибку "Неидентифицированное пространство имен". Приходится убирать его ID и из перечня полей и из XML. Тогда все работает как надо. Но как заставить VBA работать с нейм-спейсами в XML-ке? Сам код ниже:
0
|
|||||||||||
| 23.03.2012, 11:24 | |
|
Ответы с готовыми решениями:
10
В чем разница между подключением пространства имен в начале файла и внутри другого пространства имен? XSLT. Удалить пространства имен из XML Работа в Qt с XML файлами имеющими пространства имен |
|
2786 / 718 / 106
Регистрация: 04.02.2011
Сообщений: 1,443
|
|||||||
| 23.03.2012, 12:03 | |||||||
то можно написать цикл, который вместо нуля в подстроке 'ns0' будет поочередно подставлять 1, 2 и т.д. - надо только знать последний nsX - чему равно это X. Пример для ns0...ns10
0
|
|||||||
|
0 / 0 / 0
Регистрация: 23.03.2012
Сообщений: 8
|
|
| 23.03.2012, 12:15 [ТС] | |
|
Да их всего 3 на самом-то деле. ns0, 1, 2
Вопрос у меня только в том, как подружить их с VBA - то есть сделать, чтобы он не ругался?
0
|
|
|
2786 / 718 / 106
Регистрация: 04.02.2011
Сообщений: 1,443
|
|
| 23.03.2012, 12:29 | |
|
Ответ я тебе уже написал (кусок кода). Смотри выше. Там только поправь, чтобы j было от 0 до 2.
0
|
|
|
0 / 0 / 0
Регистрация: 23.03.2012
Сообщений: 8
|
|
| 23.03.2012, 13:01 [ТС] | |
|
Да, безусловно спасибо. Но это немного не то, что мне нужно. Вероятно сам виноват, что вопрос неточно сформулировал.
VBA ругается на то, что неймспейсы вообще в принципе присутствуют. Приходится их убирать и из адресов и из XML-ки.
0
|
|
|
0 / 0 / 0
Регистрация: 23.03.2012
Сообщений: 8
|
|
| 23.03.2012, 13:12 [ТС] | |
|
Вот собственно ошибка (картинка в аттаче):
0
|
|
|
2786 / 718 / 106
Регистрация: 04.02.2011
Сообщений: 1,443
|
|
| 23.03.2012, 13:26 | |
|
Надо бы исследовать коллекцию
clsXDoc.namespaces туда бы методом Add определить все три пространства имен и может все бы стало работать, кто знает.. Вы можете выложить файлы xls(x), xml для примера, чтобы можно было пробовать что-то делать макросом, экспериментировать с живым кодом, а не воображаемым?
1
|
|
|
0 / 0 / 0
Регистрация: 23.03.2012
Сообщений: 8
|
|
| 23.03.2012, 15:39 [ТС] | |
|
Ну да, все так и есть. В xml-ке сами неймспейсы очень криво заданы в тегах, поэтому по факту они совсем другие. Добавил через .add - все заработало.
Спасибо!
0
|
|
|
0 / 0 / 0
Регистрация: 23.03.2012
Сообщений: 8
|
||||||
| 26.03.2012, 12:18 [ТС] | ||||||
|
UP темы. Все-таки не работает так как надо, потому что нельзя менять эти свойства у XML-ки (read-only).
Узнал, что такие вещи делаются через .SetProperty Однако, ошибка (см. скриншот выше) все равно никуда не исчезла. Префиксы неймспейсов по-прежнему не распознана Собственно, ошибка на 14-ю строчку приводит, которая ссылается на вот такую запись: /ns0:StandardBusinessDocument/ns0:StandardBusinessDocumentHeader/ns0:HeaderVersion Даю свой код, XML дать не получается - превосходит допустимый для вложений размер файла: clsXDoc.setProperty "SelectionNamespaces",
0
|
||||||
|
0 / 0 / 0
Регистрация: 23.03.2012
Сообщений: 8
|
|
| 26.03.2012, 12:25 [ТС] | |
|
Вот что в неймспейсах документа при загрузке содержится:
0
|
|
|
0 / 0 / 0
Регистрация: 23.03.2012
Сообщений: 8
|
|
| 26.03.2012, 14:59 [ТС] | |
|
Собственно, вопрос - что я сейчас-то делаю не так?
0
|
|
| 26.03.2012, 14:59 | |
|
Помогаю со студенческими работами здесь
11
Как запретить переименование пространства имен в xml?
Имя типа или пространства имен отсутствует в пространстве имён Не возникает ли коллизия имен, если использовать два пространства имен, и в каждом из них будут одноименные? Имя типа или пространства имен "ProtectedData" отсутствует в пространстве имен System.Security.Cryptography Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд.
Даже если у вас. . .
|
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение:
В этой книге («Подход, основанный на вариантах использования») Ивар утверждает,
что архитектура программного обеспечения — это
структуры,. . .
|
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога
Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
|
|
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip
На первой гифке отладочные линии отключены, а на второй включены:. . .
|
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем.
. . .
|
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
|
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
|