0
novichok79
04.09.19
✎
12:13
|
Доброго времени суток, уважаемые специалисты 1С.
Есть список XSD-документов, ссылающихся друг на друга, в них не указан так любимый фабриками XDTO "targetNamespace".
Я написал серверный модуль анализа и исправления файлов. Функция исправления ищет ссылки на вложенные в основной XSD-документы, превращает относительные пути в абсолютные, находит общий каталог у всех файлов, воссоздает иерархию во временном каталоге на сервере, кладет туда исправленные XSD-документы, затем создает фабрику XDTO из этих документов и кидает ее обратно. Когда файлы лежали на сервере в режиме теста, работали методы построителя DOM и выполнение XPath запросов.
Но в идеальный мир вмешался случай в виде необходимости разбора данной схемы на клиенте.
Варианты решения задачи:
1. Написать примитивный разбор XML через ЧтениеXML на клиенте, чтобы найти тэги "include" c путями к вложенным схемам. потом передать эту кучку файлов на сервер, на сервере построить иерархию, сохранить файлы, обработать их.
2. Написать непримитивный разбор XML с XPath выражениями и прочими плюшками, передавая текст файла XML на сервер, для дальнейшей обработки.
Первый вариант предпочтительнее, ибо происходит одна передача кучи файлов на сервер. На стороне сервера получаем хранилищезначений с двоичными данными исправленного XSD файла и запись этого дела в реквизит Объекта справочника.
А как считаете вы? Может быть есть более элегантное решение? Подскажите пожалуйста. Заранее благодарю за помощь.
|
|
4
novichok79
04.09.19
✎
12:45
|
(3) это сейчас такой размер, но ведь заказчику могут прислать громадный XSD. ну и чтобы оное гонять по сети, для начала надо знать, какие именно файлы нужны, а для этого все равно нужен предварительный разбор XML перед отправкой. с сервера я могу вернуть фабрику XDTO без возможности сохранения в конечный файл XML (ибо метод Записать() серверный согласно СП), такая фабрика на**уй не нужна на клиенте, поэтому и предпочтительнее 1-й вариант.
|
|