Wie eine ungültige XML (ofx) mit ofx4j analysieren?
Frage
Ich versuche desperatly die folgende Bibliothek zu verwenden: ofx4j . Aber die Dokumentation bezüglich einer ofx Datei zu parsen ist ein bisschen lite. Dort heißt es: Wenn Sie eine Datei oder einen anderen Stream-Ressource haben, können Sie es mithilfe einer Instanz von net.sf.ofx4j.io.OFXReader lesen
Ok, aber wie soll ich tun?
Es gibt auch an die folgenden:., Wenn Sie die OFX direkt an ein Java-Objekt entpacken, verwenden Sie die net.sf.ofx4j.io.AggregateUnmarshaller
Gut, aber das ist ein bisschen für mich kompliziert. Gibt es etwas offensichtlich, dass ich verpasst? Wenn ich versuche, die Unmarshaller zu verwenden, es fragt mich, eine Schnittstelle zu implementieren.
Könnte mir jemand auf eine Online-Ressource zeigen die Bits zu erklären, dass ich fehle? Oder das Beste, was verstehen Sie von den bisherigen Aussagen in Bezug auf die ofxreader und den Unmarshaller?
Bitte, bash mich nicht, ich lerne Java mit dem playframework und ich würde wirklich zu schätzen, der Lage sein, diese ofx Dateien zu analysieren.
Vielen Dank im Voraus.
Lösung
Ich sehe nicht, eine gute alte Tutorial, aber es gibt Beispielcode in dem test Verzeichnis, das OFXReader
und AggregateUnmarshaller
zeigt.
Der Ausdruck "eine Instanz von net.sf.ofx4j.io.OFXReader
" bedeutet, einer der bekannten implementierenden Klassen“, wie NanoXMLOFXReader
, das ist getestet hier . ein Test auf AggregateUnmarshaller
ist hier .
Die API und Mail Archive sind gute Ressourcen, auch. Es sieht aus wie eine Menge Institutionen teilnehmen.
Andere Tipps
Für diejenigen, die auf diese stolpern wie ich, wenn ich nicht die erwarteten Ergebnisse aus dem AggregateUnmarshaller bekommen könnte ... Hier ist ein Beispiel.
//Using a multipart file, but using a regular file is similar.
public void parse(MultipartFile file) throws IOException {
//Use ResponseEnvelope to start.
AggregateUnmarshaller<ResponseEnvelope> unmarshaller = new AggregateUnmarshaller<ResponseEnvelope>(
ResponseEnvelope.class);
try {
ResponseEnvelope envelope = unmarshaller.unmarshal(file.getInputStream());
//Assume we are just interested in the credit card info. Make sure to cast.
CreditCardResponseMessageSet messageSet = (CreditCardResponseMessageSet) envelope
.getMessageSet(MessageSetType.creditcard);
List<CreditCardStatementResponseTransaction> responses = messageSet.getStatementResponses();
for (CreditCardStatementResponseTransaction response : responses) {
CreditCardStatementResponse message = response.getMessage();
String currencyCode = message.getCurrencyCode();
List<Transaction> transactions = message.getTransactionList().getTransactions();
for (Transaction transaction : transactions) {
System.out.println(transaction.getName() + " " + transaction.getAmount() + " "
+ currencyCode);
}
}
}
catch (OFXParseException e) {
e.printStackTrace();
}
}