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