Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将XML转换为Java映射<;字符串,整数>;使用XStream_Java_Xml_Map_Xstream - Fatal编程技术网

将XML转换为Java映射<;字符串,整数>;使用XStream

将XML转换为Java映射<;字符串,整数>;使用XStream,java,xml,map,xstream,Java,Xml,Map,Xstream,我正在使用XStream将XML转换为Java映射。每次我解决一个问题,就会遇到另一个问题。令人难以置信的沮丧。无论如何,XML看起来是这样的: <?xml version="1.0" encoding="UTF-8" ?> <root> <Durapipe type="int">1</Durapipe> <EXPLAIN type="int">2</EXPLAIN>

我正在使用XStream将XML转换为Java映射。每次我解决一个问题,就会遇到另一个问题。令人难以置信的沮丧。无论如何,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>
XStream xstream = new XStream();
    Map<String, Integer> englishCorpusProbDist; 
    xstream.registerConverter(new MapEntryConverter());
    englishCorpusProbDist = (Map<String, Integer>)xstream.fromXML(new File("locationOnMyComputer/frequencies.xml"));
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;
  }
}

1.
2.
2.
3.
2.
1.
5.
....
我在main中用于实现此功能的Java如下所示:

<?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>
XStream xstream = new XStream();
    Map<String, Integer> englishCorpusProbDist; 
    xstream.registerConverter(new MapEntryConverter());
    englishCorpusProbDist = (Map<String, Integer>)xstream.fromXML(new File("locationOnMyComputer/frequencies.xml"));
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;
  }
}
XStream XStream=newxstream();
地图英文版;
registerConverter(新的MapEntryConverter());
englishCorpusProbDist=(Map)xstream.fromXML(新文件(“locationOnMyComputer/frequencies.xml”);
我创建的MapEntryConverter类如下所示:

<?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>
XStream xstream = new XStream();
    Map<String, Integer> englishCorpusProbDist; 
    xstream.registerConverter(new MapEntryConverter());
    englishCorpusProbDist = (Map<String, Integer>)xstream.fromXML(new File("locationOnMyComputer/frequencies.xml"));
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;
  }
}
公共类MapEntryConverter实现转换器{
公共类java{
}
公共布尔canConvert(类clazz){
返回Map.class.isAssignableFrom(clazz);
}
公共无效封送处理(对象值、HierarchycalStreamWriter编写器、封送上下文){
Map=(Map)值;
对于(Map.Entry:Map.entrySet()){
writer.startNode(entry.getKey().toString());
writer.setValue(entry.getValue().toString());
writer.endNode();
}
}
公共对象解组(HierarchycalStreamReader读取器,解组上下文){
Map Map=newhashmap();
while(reader.hasMoreChildren()){
reader.moveDown();
put(reader.getNodeName(),新整数(reader.getValue());
reader.moveUp();
}
返回图;
}
}
目前我得到以下异常:“线程中的异常”main“com.thoughtworks.xstream.mapper.CannotResolveClassException:root”

有人能解释一下为什么会这样,我怎样才能解决这个问题吗

这个问题似乎有答案,但我认为我们正在使用不同的实现:

任何帮助都将不胜感激。提前谢谢

试试这个:

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")));
XStream XStream=newxstream(newdomdriver());
别名(“根”,Map.class);
地图英文版;
registerConverter(新的MapEntryConverter());
englishCorpusProbDist=(Map)xstream.fromXML(新文件inputStream(新文件(“locationOnMyComputer/frequencies.xml”));

好的。这似乎效果更好。如果我收到一个异常,它说,“[Fatal Error]frequencies.xml:1:27582:元素类型“key”后面必须跟属性规范“>”或“/>”,这很可能意味着我的xml代码中有错误,对吗?是的,这是xml文件中的错误,可能没有按照xml文件中的预期格式格式化