Считать XML-файл в вектор объектов с помощью XStream - PullRequest
1 голос
/ 29 февраля 2012

Я хотел бы использовать файл XML в качестве словаря для проекта НЛП, над которым я работаю. В настоящее время у меня есть класс «Слова», который является вектором объектов «Слово».

public class Words {

private Vector<Word> vect;

public Words(){
    vect = new Vector<Word>();
}

public void add(Word w){
    vect.add(w);
}

Класс "Word" выглядит примерно так:

public class Word {
private String name;
private String partOfSpeech;
private String category;
private String definition;
}

Мне удалось записать вектор "Words" в XML с помощью XStream, используя этот код:

public class Writer {

public static void main(String[] args) {

    XStream xstream = new XStream();
    xstream.alias("words", Words.class);
    xstream.alias("word", Word.class);
    xstream.addImplicitCollection(Words.class, "vect");

    Words vect = new Words();
    vect.add(new Word("dog", "noun", "animal", "a domesticated  canid, Canis  familiaris,  bred  in  many  varieties"));
    vect.add(new Word("cat", "noun", "animal", "a small domesticated carnivore, Felis domestica or F. catus, bred in a number of varieties"));


    try {
        FileOutputStream fs = new FileOutputStream("c:/dictionary.xml");
        xstream.toXML(vect, fs);
    } catch (FileNotFoundException e1) {
        e1.printStackTrace();
    }
}
}

Кажется, что все работает нормально и дает мне следующий XML-файл:

<words>
   <word>
      <name>dog</name>
      <partOfSpeech>noun</partOfSpeech>
      <category>animal</category>
      <definition>a domesticated  canid, Canis  familiaris,  bred  in  many  varieties</definition>
   </word>
   <word>
      <name>cat</name>
      <partOfSpeech>noun</partOfSpeech>
      <category>animail</category>
      <definition>a small domesticated carnivore, Felis domestica or F. catus, bred in a number of varieties</definition>
   </word>
</words>

Мой вопрос: как мне использовать XStream для чтения этого XML-файла обратно в вектор объектов?

Ответы [ 2 ]

1 голос
/ 01 марта 2012

Я смог прочитать файл, используя следующий код:

public class Reader {
public static void main(String[] args) {

    XStream xstream = new XStream(new DomDriver());
    try {
    FileInputStream fis = new FileInputStream("c:/dictionary.xml");
    ObjectInputStream in = xstream.createObjectInputStream(fis);
    xstream.alias("word", Word.class);

    Word a = (Word)in.readObject();
    Word b = (Word)in.readObject();

    in.close();

    System.out.println(a.toString());
    System.out.println(b.toString());

    } catch (FileNotFoundException ex) {
        ex.printStackTrace();
    } catch (ClassNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }       
}

}

Теперь вместо того, чтобы сказать:

Word a = (Word)in.readObject();
Word b = (Word)in.readObject();

я бынравится читать объекты в вектор с помощью цикла.Моя единственная проблема сейчас заключается в том, как узнать, сколько объектов находится в ObjectInputStream.Кажется, у него нет метода, который сообщает мне количество объектов или размер ...

0 голосов
/ 05 мая 2016

Используйте http://www.java2s.com/Code/Jar/x/xpp3.htm для разбора. Xstream автоматически обнаруживает это. Тогда одна строка: Vector g = (Vector) xstream.fromXML (String xml);

...