如何用ofx4j解析格式错误的xml(ofx)?

时间:2010-02-08 12:47:38

标签: java xml ofx

我绝望地尝试使用以下库:ofx4j。但是有关解析ofx文件的文档有点精简。它说:如果你有一个文件或其他流资源,你可以使用net.sf.ofx4j.io.OFXReader

的实例来读取它。

好的,但我该怎么办?

它还说明如下:如果要将OFX直接解组为Java对象,请使用net.sf.ofx4j.io.AggregateUnmarshaller。

很好,但这对我来说有点复杂。我错过了一些明显的东西吗?当我尝试使用unmarshaller时,它会要求我实现一个接口。

有人能指点我一个在线资源,解释我错过的部分吗?或者最好的,你从之前关于ofxreader和unmarshaller的陈述中你能理解什么?

请不要打击我,我正在使用playframework学习java,我真的很感激能够解析那些ofx文件。

提前感谢。

2 个答案:

答案 0 :(得分:5)

我没有看到一个简单的旧教程,但test目录中的示例代码说明了OFXReaderAggregateUnmarshaller

短语“net.sf.ofx4j.io.OFXReader的实例”表示已知的实施类之一“,例如NanoXMLOFXReadertested hereAggregateUnmarshaller的测试是{ {3}}

hereAPI档案也是很好的资源。看起来有很多mail参与。

答案 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();
  }
}