XML -> XSLT -> DB

#.net #xml

#.net #xml

Вопрос:

У меня есть серия XML-документов, которые мне нужно обработать, сохраняя ключевые элементы и атрибуты в нескольких реляционных таблицах («одна» и связанная с ней таблица «много»).

Я определил правильную логику Xpath, необходимую для идентификации соответствующих узлов.

Один из подходов заключается в обработке наборов узлов DOM по завершении преобразования, вставляя записи по мере необходимости. Хотя это будет работать, это кажется довольно неэлегантным.

Другим необязательным вариантом было бы сгенерировать файл CSV, а затем вставить его массово.

В любом случае было бы неплохо иметь гибкие средства для сопоставления XPath с комбинацией таблицы / столбца в файле настроек, а не жестко кодировать его.

Существуют ли какие-либо особенно элегантные способы справиться с этой ситуацией, которые я не рассматриваю?

Комментарии:

1. Извините, но я не понимаю, как этот вопрос может соответствовать XSLT, если вы хотите проанализировать XML и вставить записи в БД.

2. По сути, для преобразования подробного XML-документа в 1) другой формат, такой как CSV, или 2) тот, который можно было бы более легко сопоставить с таблицей БД.

3. Правильно, но имейте в виду, что это приведет к дополнительному шагу, которого, на мой взгляд, можно избежать.

4. Как насчет создания сопоставления ORM с помощью Entity FW (или какого-либо другого), чем создавать экземпляры классов сущностей и преобразовывать XML-данные с помощью Linq в XML в классы сущностей и сохранять их в контексте данных сущности?

5. @Aurelio, как бы вы подошли к этой проблеме? «Ходить» по DOM, вставляя по ходу дела?

Ответ №1:

Поскольку у меня была такая же проблема, я расскажу вам, как я справился. Я создал DOM на основе моего XML-файла. Чтобы убедиться, что в моих sql-операторах не было ошибок, я не вставлял данные «на лету», а создал файл, в котором были INSERT инструкции. Для оптимизации вставки я создаю INSERT оператор каждые 50 VALUES(...) . После того, как я убедился, что все в порядке, я вставил свои строки в базу данных.

Я надеюсь, что это небольшое пошаговое руководство поможет вам.

Ответ №2:

Много способов сделать это. Является ли ваша база данных базой данных SQL server? Если это так, вы можете захотеть взглянуть на OpenXML, который позволяет запрашивать xml напрямую и вставлять данные в таблицы. По сути, ваше приложение .net не будет иметь smarts, все, что оно будет делать, это считывать содержимое xml и передавать их в качестве параметра в инструкцию sql.