Преобразование csv в xml с xsd

Я пытаюсь найти многоразовый способ взять CSV файл и создать из него XML файл, который соответствует указанному XSD. Я на самом деле не нашел для этого многоразового подхода. Я использовал Altova MapForce, который позволяет мне импортировать CSV файл и XSD, делать сопоставление, чем генерировать код из этого, но код необходимо восстанавливать всякий раз, когда XSD изменяется. Altova также производит много кода.

Моим идеальным решением будет набор Java-классов, в который я могу предоставить CSV файл, XSD и получить из него XML файл. Я не могу найти ничего подобного, хотя и думаю о потенциальном создании чего-то.

Идеи? Есть ли что-то здесь, используя XSLT на основе this вопрос?

Спасибо.

5 ответов

Это похоже на то, что было бы легко сделать, но это не так. XML Schema - это язык проверки документа, а не язык создания документа. Он не говорит вам, как создать новый документ; он сообщает вам, действительно ли документ, который вы сделали, действителен. Это не одно и то же: длинный выстрел.

Например, тривиально создавать сложный тип в XML-схеме, который состоит из последовательности необязательных вариантов. Элемент foo может иметь либо дочерний элемент bar, либо baz, либо дочерний элемент baz или bat, затем дочерний элемент foo, bar или bat. Это создает правило, которое может определить, что оба эти элемента действительны:

<foo>
 <baz>
 <baz>
 </baz></baz></foo>
<foo>
 <foo>
 <bar>
 </bar></foo>
</foo>

В то же время это правило дает вам практически нулевую помощь при определении того, как взять кортеж элементов данных и создать из него элемент foo.

Как правило, когда кто-то задает этот вопрос, они рассматривают одну или две схемы, которые они используют, которые определяют относительно простую структуру документа. Кажется интуитивным, что эти схемы должны быть легко использованы в качестве входных данных для процесса сопоставления. Вероятно, это так. То, что нелегко или даже возможно, является процессом сопоставления, который может принимать любую схему в качестве входа.

То, что я сделал, в моих проектах - это упростить проблему. Я создал программы, которые используют CSV и XML и поддерживает проверку схемы, но в этих программах схема является выходом. Я определил простой формат метаданных XML, например:

Затем я могу использовать эти метаданные для управления производством XML из ввода CSV, и я также могу использовать его для создания схемы, которую создаст моя программа XML. Если я изменю свои метаданные, мои XML и схема меняются соответствующим образом.

Конечно, если схемы действительно являются входными данными вашего процесса (например, они предоставляются третьей стороной), это даже не поможет вам.


Ну, у меня нет готового готового решения для этого, но может быть:

  • прочитайте свой CSV файл с помощью библиотеки, например FileHelphers; для этого вам нужно создать класс MyDataType, который описывает столбцы в CSV, и вы получите массив MyDataType

  • если вы украсите этот класс соответствующими атрибутами сериализации XML, такими как [XmlIgnore], [XmlAttribute] и т.д., вы можете просто просто сериализовать полученный массив MyDataType в XML, который соответствует к вашей XML-схеме

  • или если это не сработает, вы можете создать другой класс, который соответствует вашим требованиям XML (сгенерируйте его из XSD, который у вас есть), и просто просто определите сопоставление между двумя типами MyDataType (from ваш CSV) и MyXmlDataType (для вашего XML) с чем-то вроде AutoMapper

Это не котельная плита, но довольно близко, и вы могли бы сделать это в значительной степени "каркасом", чтобы просто подключить ваши собственные типы (если вам нужно делать это часто).


Если ваш движок XSLT совместим с XSLT версии 2, то лучшее решение здесь:


Microsoft Excel может экспортировать XML: http://office.microsoft.com/en-us/excel-help/export-xml-data-HP010206401.aspx

У меня возникли проблемы с созданием экспортируемого формата XSD, но это отличный инструмент, когда вы его работаете.


У вас есть одна "таблица" (файл CSV), которая содержит (возможно) денормализованные строки, представляющие (возможно) иерархическую модель данных. Вы хотите сопоставить это с любым иерархическим XML-документом на основе XSD.

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

Не могли бы вы разместить некоторые образцы CSV и XSD? Это может помочь получить более целенаправленный ответ.

licensed under cc by-sa 3.0 with attribution.