2014-12-17 5 views
0

Если нам известна структура объекта, с помощью метода и атрибутов «useAttributeFor» мы можем сопоставить одно и то же имя тега и переменную класса. Но мое требование состоит в том, чтобы преобразовать xml-файл в объект, не зная структуру объекта. Для примера мы хава XML-файл test.xml с Contect как:Как преобразовать XML в объект Java без знания структуры объекта через библиотеку XStream

<test> 
    <Name>John</Name> 
    <age>18</age> 
</test> 

Теперь мне нужно, чтобы преобразовать этот файл XML в объект. My Java Class будет как:

public class Test 
{ 
    private String Name; 
    private int age; 
    public void setName(String Name,int age) 
    { 
     this.Name = Name; 
     this.age = age; 
    } 
    public void display() 
    { 
     System.out.println("Name: "+Name); 
     System.out.println("Age: "+age); 
    } 
} 

Я новичок в этом так, пожалуйста, помогите мне и спасибо всем заранее

+0

Если это вообще возможно, я бы подумал, что это как-то сделано через Reflection. Но учитывая статичность типов безопасности Java, я сомневаюсь, что это выполнимо - я бы, скорее всего, прочитал XML-файл на какой-то карте. Если, может быть, возможно создать новые .class-файлы и загрузить их во время выполнения? IDK, это далеко не то, что я знаю, как делать на Java. – ArtOfWarfare

+0

Здесь вы видите, что этот ответ похож на то, как он компилирует новые классы и загружает их во время выполнения ... Я подозреваю, вы можете как-то использовать это: http://stackoverflow.com/a/2946402/901641 – ArtOfWarfare

ответ

3

Предположим, что у вас есть требование, чтобы загрузить конфигурацию из XML-файла.

<test> 
    <name>John</name> 
    <age>18</age> 
</test> 

И вы хотите, чтобы загрузить его в объект конфигурации:

public class Test 
{ 
    private String name; 
    private int age; 
    public void setName(String name,int age) 
    { 
     this.name = name; 
     this.age = age; 
    } 
    public void display() 
    { 
     System.out.println("Name: "+name); 
     System.out.println("Age: "+age); 
    } 
} 

вы должны сделать, это:

FileReader fileReader = new FileReader("test.xml"); // load your xml file 
    XStream xstream = new XStream();  // init XStream 
    // define root alias so XStream knows which element and which class are equivalent 
    xstream.alias("test", Test.class); 
    Test test = (Test) xstream.fromXML(fileReader);` 

это все!

+0

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

+0

@onacione: Спасибо за ваш ответ, но здесь обратите внимание на тест в xstream.alias («test», Test.class) Это означает, что вы заранее знаете, что в тесте есть тег в XML-файле. Предположим, мы не знаем имя тега заранее. Он хочет, чтобы это было общим – Samraan