Вы можете сделать что-то похожее на грубый пример, который я показал ниже, чтобы использовать файл для сопоставления классов с XML-файлами. Вам нужно будет адаптировать его в соответствии с вашими конкретными потребностями.
Я создал несколько очень простых классов провести некоторые примитивные типы данных для иллюстрации использования:
ClassOne:
package so27409179;
@XmlRootElement(name="ClassOne")
@XmlAccessorType(XmlAccessType.FIELD)
public class ClassOne {
@XmlElement(name="Field")
String field;
public ClassOne() {
}
public String getField() {
return field;
}
public void setField(String field) {
this.field = field;
}
@Override
public String toString() {
return "ClassOne\n" + "\tField = " + getField();
}
}
ClassTwo:
package so27409179;
@XmlRootElement(name="ClassTwo")
@XmlAccessorType(XmlAccessType.FIELD)
public class ClassTwo {
@XmlElement(name="Field1")
String field1;
@XmlElement(name="Field2")
int field2;
@XmlElement(name="Field3")
double field3;
public ClassTwo() {
}
public String getField1() {
return field1;
}
public void setField1(String field1) {
this.field1 = field1;
}
public int getField2() {
return field2;
}
public void setField2(int field2) {
this.field2 = field2;
}
public double getField3() {
return field3;
}
public void setField3(double field3) {
this.field3 = field3;
}
@Override
public String toString() {
return "ClassTwo\n" +
"\tField1 = " + getField1() +
"\n\tField2 = " + getField2() +
"\n\tField3 = " + getField3();
}
}
ClassThree:
package so27409179;
@XmlRootElement(name = "ClassThree")
@XmlAccessorType(XmlAccessType.FIELD)
public class ClassThree {
@XmlElement(name="Field1")
String field1;
@XmlElement(name="Field2")
String field2;
public ClassThree() {
}
public String getField1() {
return field1;
}
public void setField1(String field1) {
this.field1 = field1;
}
public String getField2() {
return field2;
}
public void setField2(String field2) {
this.field2 = field2;
}
@Override
public String toString() {
return "ClassThree\n" +
"\tField1 = " + getField1() +
"\n\tField2 = " + getField2();
}
}
Затем я создал простой файл сопоставления (с разделителями-запятой), который сопоставляет имена файлов именам классов. Я назвал этот файл mappings.txt
:
XmlFile1.xml,so27409179.ClassOne
XmlFile2.xml,so27409179.ClassTwo
XmlFile3.xml,so27409179.ClassThree
Затем я создал несколько фиктивных файлов XML, чтобы соответствовать отображениями:
XmlFile1.xml:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ClassOne>
<Field>Some Class 1 Field Value</Field>
</ClassOne>
XmlFile2.xml:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ClassTwo>
<Field1>Some Class 2 Field Value</Field1>
<Field2>100</Field2>
<Field3>12.34</Field3>
</ClassTwo>
XmlFile3.xml:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ClassThree>
<Field1>Some Class 3 Field Value</Field1>
<Field2>Another Class 3 Field Value</Field2>
</ClassThree>
Затем я создал тестовый класс, который считывает этот файл и помещает имя файла и объект класса, соответствующее имя класса в Map
, который вы можете использовать для любого вы хотите, а также распаковать данные и распечатать информацию, которую он прочитал
public class TestClassMapper {
public static void main(String[] args) {
Map<String,Class> classMap = new HashMap<String, Class>();
try {
// reader for reading mapping file
BufferedReader reader = new BufferedReader(new FileReader("mappings.txt"));
String line;
// read each line in the file
while ((line = reader.readLine()) != null) {
// split the data
String[] parts = line.split(",");
String fileName = parts[0]; // file name
Class clazz = Class.forName(parts[1]); // class object
classMap.put(fileName, clazz); // you might want to do something with this later...
// unmarshal the data
JAXBContext context = JAXBContext.newInstance(clazz);
Unmarshaller u = context.createUnmarshaller();
// generic object
Object o = u.unmarshal(new File(fileName));
// print out the data received
System.out.println(o.toString());
}
}
catch (Exception ex) {
}
}
}
наблюдается следующий вывод:
ClassOne
Field = Some Class 1 Field Value
ClassTwo
Field1 = Some Class 2 Field Value
Field2 = 100
Field3 = 12.34
ClassThree
Field1 = Some Class 3 Field Value
Field2 = Another Class 3 Field Value
Удачи, надеюсь, это поможет.
Отлично. Спасибо Райан Дж. Я попробую это. – user4347087