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

Зависит от версии, 4 значением, 5 ссылкой.

5
задан Community 23 May 2017 в 11:52
поделиться

3 ответа

This seems like something that would be easy to do, but it's not. XML Schema is a document validation language, not a document production language. It doesn't tell you how to make a new document; it tells you whether or not the document that you made is valid. Those aren't the same thing by a long shot.

For instance, it's trivial to create a complex type in XML Schema that consists of a sequence of optional choices. A foo element can have either a bar or baz child, then either a baz or bat child, then a foo, bar, or bat child. That makes for a rule that can determine that both of these elements are valid:

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

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

At the same time, that rule gives you pretty much zero help in determining how to take a tuple of data items and create a foo element from it.

Generally, when someone asks this question, they're looking at one or two schemas they're using which define a relatively simple document structure. It seems intuitive that it should be easy to use those schemas as input to a mapping process. It probably is. What's not easy, or even possible, is a mapping process that can take any schema as an input.

What I've done instead, in my projects, is to simplify the problem. I've built programs that use CSV and XML and and support schema validation, but in these programs, the schema is an output. I've defined a simple XML metadata format, e.g.:

<item name="foo" type="string" size="10" allowNulls="true" .../>
<item name="bar" type="date" allowNulls="false" .../>

Then I can use that metadata to control XML production from CSV input, and I can also use it to produce a schema that the XML my program produces will conform to. If I change my metadata, my XML and schema changes appropriately.

Of course, if the schemas are genuinely an input to your process (e.g. they're provided by a third party), this won't even start to help you.

7
ответ дан 13 December 2019 в 22:10
поделиться

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

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

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

0
ответ дан 13 December 2019 в 22:10
поделиться

Ну, на самом деле у меня нет готового, готового решения для этого, но возможно:

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

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

  • , или, если это не сработает, вы можете создать другой класс, который соответствует вашим требованиям XML (сгенерируйте его из имеющегося у вас XSD),

2
ответ дан 13 December 2019 в 22:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: