Как разобрать искаженный xml (ofx) с ofx4j?
Я отчаянно пытаюсь использовать следующую библиотеку: ofx4j. Но документация, относящаяся к разбору файла ofx, немного упрощена. Он говорит: если у вас есть файл или другой ресурс потока, вы можете прочитать его, используя экземпляр net.sf.ofx4j.io.OFXReader
Хорошо, но как мне это сделать?
В нем также говорится следующее: если вы хотите демонтировать OFX непосредственно в объект Java, используйте net.sf.ofx4j.io.AggregateUnmarshaller.
Хорошо, но это немного сложно для меня. Есть что-то очевидное, что я пропустил? Когда я пытаюсь использовать unmarshaller, он просит меня реализовать интерфейс.
Может ли кто-нибудь указать мне на онлайн-ресурс, объясняющий, что я пропускаю? Или лучше всего, что вы понимаете из предыдущих утверждений относительно ofxreader и unmarshaller?
Пожалуйста, не ругайте меня, я изучаю Java с помощью playframework, и я был бы очень признателен за возможность разбора этих файлов ofx.
заранее спасибо.
2 ответа
Я не вижу простого старого учебника, но в тестовом каталоге есть пример кода, который иллюстрирует OFXReader
а также AggregateUnmarshaller
,
Фраза "экземпляр net.sf.ofx4j.io.OFXReader
"означает один из известных классов реализации", такой как NanoXMLOFXReader
, который проверен здесь. Тест для AggregateUnmarshaller
здесь
API и почтовые архивы также являются хорошими ресурсами. Похоже, много учреждений участвуют.
Для тех, кто наткнулся на это, как я, когда я не мог получить ожидаемые результаты от 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();
}
}