Я не могу сопротивляться представлению гораздо более короткого решения с использованием XMLBeam , который работает с любым количеством подэлементов «detail-x».
public class Tetst {
@XBDocURL("resource://test.xml")
public interface Projection {
@XBRead("name()")
String getName();
@XBRead("./detail")
List getDetailStrings();
@XBRead("/Details/*")
List getDetails();
}
@Test
public void xml2Hashmap() throws IOException {
HashMap> hashmap = new HashMap>();
for (Projection p : new XBProjector().io().fromURLAnnotation(Projection.class).getDetails()) {
System.out.println(p.getName() + ": " + p.getDetailStrings());
hashmap.put(p.getName(), p.getDetailStrings());
}
}
}
Это выводит
detail-a: [ attribute 1 of detail a , attribute 2 of detail a , attribute 3 of detail a ]
detail-b: [ attribute 1 of detail b , attribute 2 of detail b ]
для вашего примера test.xml и заполняет Hashmap.