Каковы преимущества и недостатки вставки CSV-форматированных данных внутри элемента xml?CSV как текстовый узел XML-элемента
Я должен сериализовать объекты в java с полем данных матрицы в xml. Я отказался от идеи использования привязки данных с Jaxb; дженерики и коллекции, содержащие коллекции, слишком много для борьбы.
Я думал о простой схеме для моей матрицы, но так как мне также придется реализовывать сериализацию матриц в CSV, почему бы просто не сбросить CSV-строку в качестве текстового узла в элементе? Это также сделает файлы немного меньше.
Можете ли вы представить аргументы против этой идеи?
Должен ли я добавить что-то вроде csv mimetype к этому элементу?
EDIT: Вот решение, которое я выбрал. Он использует Super-CSV. Перечисление необходимо, потому что общий тип удаляется во время выполнения. Основной файл xml будет ссылаться на файлы csv.
static public enum SerializableType{INTEGER,DOUBLE,...};
@SuppressWarnings("unchecked")
public static <T> Matrix<T> fromCSV(InputStream in, CsvPreference pref, SerializableType t)
{
Matrix<T> o = new Matrix<T>();
// Super-csv class
CsvListReader csv_reader = new CsvListReader(new InputStreamReader(in), pref);
Integer n = null;
try {
List<String> l = csv_reader.read();
n = l.size(); o.n = n;
int i=0;
while(l!=null)
{
o.appendRow();
T val;
for(int j=0;j<n;j++)
{
switch(t)
{
case INTEGER:
val = (T)Integer.valueOf(Integer.parseInt(l.get(j)));
break;
case DOUBLE:
val = (T)Double.valueOf(Double.parseDouble(l.get(j)));
break;
case <...>
default:
throw new IllegalArgumentException();
}
o.set(i,j, val);
}
i++;
l = csv_reader.read();
}
csv_reader.close();
} catch (IOException e) {
e.printStackTrace();
}
return o;
}
public static<T> void toCSV(Matrix<T> m, CsvListWriter csv_writer, SerializableType t)
{
try {
for(int i=0;i<m.rowCount();i++)
{
ArrayList<String> l = new ArrayList<String>();
for(int j=0;j<m.columnCount();j++)
{
if(m.get(i,j)==null)
{
l.add(null);
}
else{
switch(t)
{
case INTEGER:
l.add(Integer.toString((Integer)m.get(i,j)));
break;
case DOUBLE:
l.add(Double.toString((Double)m.get(i,j)));
break;
case
<...>
default:
throw new IllegalArgumentException();
};
}
}
csv_writer.write(l);
}
csv_writer.flush();
csv_writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
После прочтения бит некоторых скупых w3c спецификации (Уче, что болеет мой мозг ...) и несколько статей Википедии, я думаю, что я буду использовать комбинацию баночки и XInclude , Я положу пути, связанные с jar-архивом, в файлы csv в некотором атрибуте xml (я назову его тип) с помощью приложения mimetype/csv. Объекты полей данных элемента основного типа, которые должны быть сериализованы, будут находиться в собственном XML-файле в банке с основным файлом, который будет их включать. –