#mysql #xml #xpath
#mysql #xml #xpath
Вопрос:
Существует подсистема, которая генерирует файл данных XML для каждого запроса оценки. Этот XML-файл может содержать данные примерно для 1000 полей. Ежемесячно генерируется не менее 10000 файлов XML-данных. Файлы генерируются на файловом сервере и структурируются с использованием папок файловой системы. Смотрите пример на снимке ниже:
Структура XML из одного файла в другой может отличаться, поскольку спецификации ввода данных меняются с течением времени.
Не все поля должны отправляться в базу данных, только определенные поля, и по крайней мере около 200 полей должны отправляться в базу данных в определенной таблице. Например, в XML есть данные, указывающие на контактные данные и сопоставимые детали. Итак, для запроса оценки номер 123 мы вставим одну запись для информации о контактах в одну таблицу контактов и одну запись для информации о сопоставимых данных в таблицу сопоставимых данных.
Вопрос: Есть ли способ подключиться с MySQL или SQL Server для чтения XML-файлов напрямую через файловую систему? Существует ли какая-либо промежуточная подсистема или соединитель, который делает этот процесс возможным. Затем, после доступа к файлу XML, можно ли преобразовать его в формат таблицы и использовать обычный запрос для извлечения полей и их значений?
В настоящее время мы разрабатываем программы в ASP.NET и Java для доступа к файловой системе, запрашивают файлы данных XML (используя API файловой системы), обрабатывают каждый файл по одному, преобразуют файл данных XML в документ XML, используют XPath для получения полей и значений и подключаются к базе данных на основе определенного сопоставления (чтобы решить, где будет сохранен элемент XML, т. Е. в какой базе данных / таблице / столбце) и генерируют Insert SQL и выполняют его для вставки записи в указанную таблицу.
Мне просто интересно, есть ли более простой метод?
Ответ №1:
Используя Saxon, вы могли бы сделать это в одном скрипте XSLT:
(a) с collection()
функцией вы можете получить доступ ко всем XML-файлам в каталоге и применить одинаковую обработку к каждому из них
(b) с sql:insert
расширением Saxon вы можете записывать новые строки в реляционную базу данных.
Это, безусловно, потребует намного меньше кодирования, чем то, как вы это делаете, хотя производительность может не сильно отличаться (в зависимости от того, насколько хорош ваш Java-код).
Если вы инвестируете в Saxon-EE, вы можете получить преимущество в производительности, поскольку функция collection() автоматически становится многопоточной, поэтому она использует преимущества нескольких ядер.
[Отказ от ответственности: Saxon разработан моей компанией]
Комментарии:
1. Большое спасибо за ответ. Пожалуйста, предоставьте ссылку и дайте мне знать, есть ли демо. Я хотел бы получить более подробную информацию, чтобы предложить это команде.