Как разобрать искаженный 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();
  }
}
Другие вопросы по тегам