Преобразование XML в карту Java <String, Integer> с помощью XStream

1

Я преобразовываю XML в карту Java с помощью XStream. Каждый раз, когда я решаю одну проблему, я сталкиваюсь с другой. Невероятно разочаровывает. В любом случае, XML выглядит примерно так:

<?xml version="1.0" encoding="UTF-8" ?>
    <root>
        <Durapipe type="int">1</Durapipe>
        <EXPLAIN type="int">2</EXPLAIN>
        <woods type="int">2</woods>
        <hanging type="int">3</hanging>
        <hastily type="int">2</hastily>
        <localized type="int">1</localized>
        <Schuster type="int">5</Schuster>
        ....
    </root>

Java в моем основном, что я использую для реализации, выглядит следующим образом:

XStream xstream = new XStream();
    Map<String, Integer> englishCorpusProbDist; 
    xstream.registerConverter(new MapEntryConverter());
    englishCorpusProbDist = (Map<String, Integer>)xstream.fromXML(new File("locationOnMyComputer/frequencies.xml"));

Класс MapEntryConverter, который я создал, выглядит так:

public class MapEntryConverter implements Converter {
  public class java {

    }

public boolean canConvert(Class clazz) {
    return Map.class.isAssignableFrom(clazz);
  }

  public void marshal(Object value, HierarchicalStreamWriter writer, MarshallingContext context) {
    Map<String, Integer> map = (Map<String, Integer>) value;
    for (Map.Entry<String, Integer> entry : map.entrySet()) {
      writer.startNode(entry.getKey().toString());
      writer.setValue(entry.getValue().toString());
      writer.endNode();
    }
  }

  public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext context) {
    Map<String, Integer> map = new HashMap<String, Integer>();

    while (reader.hasMoreChildren()) {
      reader.moveDown();
      map.put(reader.getNodeName(), new Integer(reader.getValue()));
      reader.moveUp();
    }
    return map;
  }
}

На данный момент я получаю следующее исключение: "Исключение в потоке" main "com.thoughtworks.xstream.mapper.CannotResolveClassException: root".

Может ли кто-нибудь объяснить, почему это так и как я могу это исправить?

Этот вопрос казался, что он может иметь ответ, но я думаю, что мы используем разные реализации: com.thoughtworks.xstream.mapper.CannotResolveClassException

Любая помощь будет принята с благодарностью. Заранее спасибо!

Теги:
xstream
map

1 ответ

2
Лучший ответ

Попробуй это:

XStream xstream = new XStream(new DomDriver());
        xstream.alias("root", Map.class);
        Map<String, Integer> englishCorpusProbDist; 
        xstream.registerConverter(new MapEntryConverter());
        englishCorpusProbDist = (Map<String, Integer>)xstream.fromXML(new FileInputStream(new File("locationOnMyComputer/frequencies.xml")));
  • 0
    Хорошо. Кажется, это сработало лучше. Если я получаю исключение, которое говорит: «[Fatal Error] частоты.xml: 1: 27582: за типом элемента« ключ »должны следовать либо спецификации атрибутов,«> »или« /> ».», Это, скорее всего, означает, что есть ошибка в моем коде XML, правильно?
  • 1
    да, это ошибка в вашем XML-файле, вероятно, не отформатирована, как ожидалось в XML-файле

Ещё вопросы

Сообщество Overcoder
Наверх
Меню