Die richtige Methode aus einer DTO auszurufen

Bitte aktiviere JavaScript!
@temi : nein das will ich nicht.
Warum heißen die Methoden nicht "getBeschreibung" und "setBeschreibung", sowie "getWert" und "setWert"?

Dann sind auch "getA" und "setA" kein Problem mehr. Einfach eine Tabellenzeile auf ein DTO mappen und fröhlich auf die Werte zugreifen.
Wie würde denn diese Lösung aussehen?? Kannst du bitte mir anhand meiner tabelle oben ein beisiel geben?

danke
 
A

Anzeige


Vielleicht hilft dir dieser Kurs hier weiter: (hier klicken)
Was er will, soweit ich es bisher verstanden habe, ist ein DTO, welches die gesamte Tabelle darstellt, und jede Zeile der Tabelle ist ein Feld im DTO.
Aber deckt sich das auch mit der Aufgabenbeschreibung?

lese die Excel datei und wenn in einer Zelle der Spalte "Wert" ein Wert gesetzt ist dann setze den Wert für die entsprechenden Beschreibung., das ganze in XML dann ausgeben.
Ich würde halt einfach die Excel-Tabelle Zeile für Zeile als DTO einlesen und als XML ausgeben.
 
Java:
public class MeinDTO  {
    private String beschreibung;
    private int wert;
    private int a;

   public String getBeschreibung() {
        return beschreibung;
    }

    public void setBeschreibung(String value) {
        this.beschreibung = value;
    }

    // usw...
}
Und dann:

Java:
    List<MeinDTO> zeuch;
}
 
Ich meine das so, wie @temi und in Kommentar #2 geschrieben: als Liste von DTOs einlesen. Dann einfach wieder als XML ausgeben.
 
@temi wie entsteht diese Liste??

Ich lese zeilenweise und dann acke ich das in einer Mapp :
Code:
public HashMap<String, String> map = new HashMap<String, String>();
map.put(bezeichner, wert);
Ich verstehe nicht so ganz wie du das meinst mit
Code:
  List<MeinDTO> zeuch;
 
Im Prinzip genauso, wie du es schon machst.

Java:
list.add(new MeinDTO(bezeichner, wert, a, b, c));
Du musst für MeinDTO natürlich noch einen entsprechenden Konstruktor schreiben.
 
Das QnD-Programm
Java:
import java.nio.file.Files;
import java.io.*;
import java.util.List;
import java.util.stream.Collectors;

import org.w3c.dom.*;
import javax.xml.*;
import javax.xml.parsers.*;
import javax.xml.transform.*;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

public class Test {
    static class MeinDTO {
        Integer a;
        Integer b;
        Integer c;
        Integer value;
        String description;

        void setA(Integer v) { a = v; }
        void setB(Integer v) { b = v; }
        void setC(Integer v) { c = v; }
        void setValue(Integer v) { value = v; }
        void setDescription(String d) { description = d; }        
    }

    private String fieldSeparator = ";";

    public Document toXml(List<MeinDTO> dtos) {
        try {
            DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
            Document doc = db.newDocument();
            Element elem = doc.createElement("liste");
            doc.appendChild(elem);
            for (MeinDTO dto : dtos) {
                append(elem, dto);
            }            
            return doc;
        } catch (ParserConfigurationException pcs) {
            throw new RuntimeException(pcs);
        }
    }

    private void append(Element elem, MeinDTO dto) {
        Document doc = elem.getOwnerDocument();
        Element dtoElem = doc.createElement("dto");
        addAttribute(dtoElem, "a", dto.a);
        addAttribute(dtoElem, "b", dto.b);
        addAttribute(dtoElem, "c", dto.c);
        dtoElem.setTextContent(dto.description);
        elem.appendChild(dtoElem);
    }

    private void addAttribute(Element elem, String attr, Object value) {
        if (value != null) {
            elem.setAttribute(attr, value.toString());
        }
    }

    public void write(Document doc, File dest) {        
        try {
            Transformer transformer = 
                TransformerFactory.newInstance().newTransformer();
    
            transformer.setOutputProperty(OutputKeys.INDENT, "yes");
            transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");

            transformer.transform(new DOMSource(doc), new StreamResult(dest));
        } catch (TransformerException ex) {
            throw new RuntimeException(ex);
        }
    }

    public List<MeinDTO> readCsv(File file) {
        try {
            return Files.lines(file.toPath())
                .skip(1)
                .map(this::toDTO)
                .collect(Collectors.toList());
        } catch (IOException ex) {
            throw new UncheckedIOException(ex);
        }
    }

    private MeinDTO toDTO(String line) {
        String[] cells = line.split(fieldSeparator);
        MeinDTO result = new MeinDTO();
        result.setA(Integer.parseInt(cells[0]));
        if (!cells[1].isEmpty()) {
            result.setB(Integer.parseInt(cells[1]));
        }
        result.setC(Integer.parseInt(cells[2]));
        result.setDescription(cells[3]);
        result.setValue(Integer.parseInt(cells[4]));
        return result;
    }    

    public static void main(String[] ags) {
        Test test = new Test();
        List<MeinDTO> dtos = test.readCsv(new File("test.csv"));
        Document doc = test.toXml(dtos);
        test.write(doc, new File("test.xml"));
    }
}

liefert für
Code:
A;B;C;Beschreibung;Wert
11;;1;bla bla bla;100
11;;2;blub blub blub;200
23;;3;lalalal lalal;200
23;1;4;sehr witzig;150

die XML-Datei
XML:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<liste>
  <dto a="11" c="1">bla bla bla</dto>
  <dto a="11" c="2">blub blub blub</dto>
  <dto a="23" c="3">lalalal lalal</dto>
  <dto a="23" b="1" c="4">sehr witzig</dto>
</liste>
 
Passende Stellenanzeigen aus deiner Region:

Neue Themen

Oben