Moin Moin!
ich habe ein Problem. Ich versuche die .xml der Europäischen Zentralbank einzulesen. Der Aufbau ist folgendermaßen (von mir gekürzt):
Ich benötige nur die Cube Elemente, welche einen Währungskürzel und den Tageskurs enthalten. Mein Code sieht folgendermaßen aus:
Bei jedem Cube-Element wird ein Objekt Waehrung erstellt. Bei jedem schließenden Cube-Tag, wird das Objekt in eine Liste gepackt. Das Problem: Die letzte Währung (<Cube currency="BGN" rate="1.9558" />) hängt 3 mal in meiner Liste, da ja bei jedem schlißenden Tag das Objekt angehangen wird.
Meine Frage: Wie kann ich das umgehen? Ich möchte jede Währung nur einmal in meiner Liste haben, also in diesem Fall 6stk.
Hier noch der Code:
ich habe ein Problem. Ich versuche die .xml der Europäischen Zentralbank einzulesen. Der Aufbau ist folgendermaßen (von mir gekürzt):
Code:
<?xml version="1.0" encoding="UTF-8"?>
<gesmes:Envelope
xmlns:gesmes="http://www.gesmes.org/xml/2002-08-01"
xmlns="http://www.ecb.int/vocabulary/2002-08-01/eurofxref">
<gesmes:subject>Reference rates</gesmes:subject>
<gesmes:Sender>
<gesmes:name>European Central Bank</gesmes:name>
</gesmes:Sender>
<Cube>
<Cube time="2018-08-06">
<Cube currency="USD" rate="1.1543" />
<Cube currency="JPY" rate="128.68" />
<Cube currency="BGN" rate="1.9558" />
</Cube>
<Cube time="2018-08-03">
<Cube currency="USD" rate="1.1588" />
<Cube currency="JPY" rate="129.3" />
<Cube currency="BGN" rate="1.9558" />
</Cube>
</Cube>
</gesmes:Envelope>
Ich benötige nur die Cube Elemente, welche einen Währungskürzel und den Tageskurs enthalten. Mein Code sieht folgendermaßen aus:
Bei jedem Cube-Element wird ein Objekt Waehrung erstellt. Bei jedem schließenden Cube-Tag, wird das Objekt in eine Liste gepackt. Das Problem: Die letzte Währung (<Cube currency="BGN" rate="1.9558" />) hängt 3 mal in meiner Liste, da ja bei jedem schlißenden Tag das Objekt angehangen wird.
Meine Frage: Wie kann ich das umgehen? Ich möchte jede Währung nur einmal in meiner Liste haben, also in diesem Fall 6stk.
Hier noch der Code:
Code:
public List<Waehrung> liesXmlEin(String xml) throws XMLStreamException
{
if (xml == "")
{
throw new IllegalArgumentException();
}
else
{
InputStream inputStream = new ByteArrayInputStream(xml.getBytes());
XMLInputFactory factory = XMLInputFactory.newInstance();
XMLEventReader eventReader = factory.createXMLEventReader(inputStream);
List<Waehrung> waehrungen = new ArrayList<>();
Waehrung waehrung = null;
boolean gueltigeWaehrung = false;
while (eventReader.hasNext())
{
XMLEvent xmlEvent = eventReader.nextEvent();
if (xmlEvent.isStartElement())
{
StartElement startElement = xmlEvent.asStartElement();
if ("Cube".equalsIgnoreCase(startElement.getName().getLocalPart()))
{
waehrung = new Waehrung();
gueltigeWaehrung = false;
}
Iterator<Attribute> iterator = startElement.getAttributes();
while (iterator.hasNext())
{
Attribute attribute = iterator.next();
QName name = attribute.getName();
if ("currency".equalsIgnoreCase(name.getLocalPart()))
{
gueltigeWaehrung = true;
waehrung.setWaehrungskuerzel((String.valueOf(attribute.getValue())));
}
if ("rate".equalsIgnoreCase(name.getLocalPart()))
{
waehrung.setTageskurs(((new BigDecimal(String.valueOf(attribute.getValue())))));
}
}
}
if (xmlEvent.isEndElement())
{
EndElement endElement = xmlEvent.asEndElement();
if ("Cube".equalsIgnoreCase(endElement.getName().getLocalPart())
&& (gueltigeWaehrung == true))
{
waehrungen.add(waehrung);
}
}
}
return waehrungen;
}
}