#.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.