Java-da XML ma'lumotlarini marshall/unmarshall qilish uchun oddiy (http://simple.sourceforge.net/) kutubxonasidan foydalanmoqdaman. Ba'zi murakkabroq ma'lumotlar tuzilmalari uchun men o'z Konvertorlarimni yozishim kerak. Masalan, menda marshall qilishim kerak bo'lgan List<List<String>>
bor deb ayting. Men quyidagilarni yozdim:
class WorldObject {
@Element(name="vector-names")
@Convert(ListListConverter.class)
private List<List<String>> vectorNames;
/** Constructor and other details ... **/
}
ListListConverter bilan bir qatorda (men unmarshallerni hozircha qoldirdim):
class ListListConverter implements Converter<List<List<String>>> {
@Override
public List<List<String>> read(InputNode node) throws Exception {
// stub
return null;
}
@Override
public void write(OutputNode node, List<List<String>> value)
throws Exception {
node.setName("list-list-string");
for (List<String> list : value) {
OutputNode subList = node.getChild("list-string");
for (String str : list) {
OutputNode stringNode = subList.getChild("string");
stringNode.setValue(str);
}
subList.commit();
}
node.commit();
}
}
Ushbu sozlash yaxshi ishlaydi va men xohlagan XMLni ishlab chiqaradi. Men teglarga standart nom ("list-list-string"
) o'rniga belgilangan nomni (bu holda "vector-names"
) berishim uchun @Element
izohining name
maydoniga kirishni xohlayman. Simple ishlatadigan barcha turlar uchun marshalling shunday ishlaydi, shuning uchun maxsus konvertordan ushbu ma'lumotlarga kirishning yo'li bo'lishi kerak.
Buni qanday amalga oshirishim mumkin?