0

嗨,我正在对以下图表进行反序列化:

<grafo>
 <nodo id="1">
   <child id="2"/>
 </nodo>
 <nodo id="2">
   <child id="3"/>
   <child id="4"/>
 </nodo>
 <nodo id="3">
   <child id="4"/>
 </nodo>
 <nodo id="4">
   <child id="1"/>
 </nodo>

我需要将子节点与图表列表中其他节点的引用链接起来,这意味着在解组过程中我不能只创建一个新节点并将它的 id 设置为给我读者的属性,我需要它与图上已经存在的节点共享它的属性,以便能够做到这一点,我在 GraphConverter 类中尝试使用以下函数:

public Object unmarshal(HierarchicalStreamReader reader,UnmarshallingContext arg1) {
    Grafo graph= new Grafo();
    ArrayList<ArrayList<String>> handlechilds= new ArrayList<ArrayList<String>>();
     while (reader.hasMoreChildren()) 
     {
         reader.moveDown();
         Nodo node= new Nodo(reader.getAttribute("id"));
         graph.nodos.add(node);
         reader.moveDown();
         //reader.getAttribute("id") ->> this just gives me the value of the fisrt node but not the anothers!!
         reader.moveUp();
         reader.moveUp();
     }
    return graph;
}

我正在考虑保存边的值并在另一个中添加引用以迭代图形,但我意识到当读者只返回一个孩子时,我需要所有这些。

4

1 回答 1

2

阅读XStream 中的对象引用

xstream.setMode(XStream.ID_REFERENCES);
于 2012-10-30T15:24:12.070 回答