2013-06-19 3 views
0

Я пытаюсь сбрасывать xml с помощью HashMap и ArrayList.Java - Dumping to XML

Я хочу, чтобы он в следующем формате:

<Modscript> 
<Class Name> Node </Class Name> 
<Class Name Found> fi <Class Name Found> 
<Field Name> getId<Field Name> 
<Field Name Found> Dz <Field Name Found> 
</Modscript> 

Я использую следующие коды;

public static final HashMap<String, ClassNode> IDENTIFIED = new HashMap<>(); 

public static final ArrayList<FieldAnalyser> FIELDS = new ArrayList<FieldAnalyser>(); 

и

protected void addClass(ClassNode node, String name) { 
    IDENTIFIED.put(name, node); 
} 

protected ClassNode getClass(String name) { 
    return IDENTIFIED.get(name); 
} 

protected void addField(String cn, String fn, String name) { 
    FIELDS.add(new FieldAnalyser(cn, fn, name)); 
} 

и

private final String owner; 
private final String field; 
private final String name; 

public FieldAnalyser(String owner, String field, String name) { 
    this.owner = owner; 
    this.field = field; 
    this.name = name; 
} 

public String getOwner() { 
    return owner; 
} 

public String getField() { 
    return field; 
} 

public String getName() { 
    return name; 
} 

и, наконец, часть, которую я не могу понять, как сделать правильно;

Element root = doc.createElement("Modscript"); 
     doc.appendChild(root); 

     Element Details = doc.createElement("test"); 
     root.appendChild(Details); 

     for (FieldAnalyser fieldAnal : Analyser.FIELDS) { 

      Element tclass = doc.createElement("Class"); 
      tclass.appendChild(doc.createTextNode(fieldAnal.getOwner())); 
      Details.appendChild(tclass); 

      Element tfield = doc.createElement("Field"); 
      tfield.appendChild(doc.createTextNode(fieldAnal.getField())); 
      Details.appendChild(tfield); 

      Element tname = doc.createElement("name"); 
      tname.appendChild(doc.createTextNode(fieldAnal.getName())); 
      Details.appendChild(tname); 
     } 

Если вы могли бы помочь мне в правильном форматировании, это значило бы много! Заранее спасибо!

ответ

1

После того как я попробовал много разных вещей, я узнал, что вы должны использовать Итератор.

 Set mapSet = (Set) Analyser.XMLDUMP.entrySet(); 
     Iterator mapIterator = mapSet.iterator(); 

     while (mapIterator.hasNext()) { 
      Map.Entry mapEntry = (Map.Entry) mapIterator.next(); 
      String keyValue = (String) mapEntry.getKey(); 
      String value = (String) mapEntry.getValue(); 

      Element Details = doc.createElement(keyValue); 
      root.appendChild(Details); 

      Element id = doc.createElement("Class"); 
      id.appendChild(doc.createTextNode(value)); 
      Details.appendChild(id); 

      for (FieldAnalyser fieldAnal : Analyser.FIELDS) { 
       if(fieldAnal.getOwner().equals(value)) { 

        Element fieldFound = doc.createElement(fieldAnal.getName()); 
        fieldFound.appendChild(doc.createTextNode(fieldAnal.getField())); 
        Details.appendChild(fieldFound); 
       } 
      } 
     }