我绝望地尝试使用以下库:ofx4j。但是有关解析ofx文件的文档有点精简。它说:如果你有一个文件或其他流资源,你可以使用net.sf.ofx4j.io.OFXReader
的实例来读取它。好的,但我该怎么办?
它还说明如下:如果要将OFX直接解组为Java对象,请使用net.sf.ofx4j.io.AggregateUnmarshaller。
很好,但这对我来说有点复杂。我错过了一些明显的东西吗?当我尝试使用unmarshaller时,它会要求我实现一个接口。
有人能指点我一个在线资源,解释我错过的部分吗?或者最好的,你从之前关于ofxreader和unmarshaller的陈述中你能理解什么?
请不要打击我,我正在使用playframework学习java,我真的很感激能够解析那些ofx文件。
提前感谢。
答案 0 :(得分:5)
我没有看到一个简单的旧教程,但test目录中的示例代码说明了OFXReader
和AggregateUnmarshaller
。
短语“net.sf.ofx4j.io.OFXReader
的实例”表示已知的实施类之一“,例如NanoXMLOFXReader
,tested here。AggregateUnmarshaller
的测试是{ {3}}
答案 1 :(得分:2)
对于那些偶然发现的人,就像我无法从AggregateUnmarshaller获得预期结果时那样...这是一个例子。
//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();
}
}