4

我需要使用 Open Financial Exchange (OFX) 协议检索财务数据。为此,我使用 JAXB 将对象树编组为指定数据请求参数的 XML 字符串,然后将此 XML 字符串发送到银行的服务器。然后银行以包含所请求数据的 XML 字符串进行响应,我使用 JAXB 将其解组到对象树中。对于我尝试的前几家银行,我收到了符合已发布 OFX 模式的格式良好的 XML 格式的数据,并且我能够使用 JAXB 轻松解组它。

然而,当我向花旗集团索取数据时,他们给我发回了以下信息:

OFXHEADER:100
DATA:OFXSGML
VERSION:102
SECURITY:NONE
ENCODING:USASCII
CHARSET:1252
COMPRESSION:NONE
OLDFILEUID:NONE
NEWFILEUID:NONE

<OFX>
<SIGNONMSGSRSV1>
<SONRS>
<STATUS>
<CODE>0
<SEVERITY>INFO
</STATUS>
<DTSERVER>20150513180826.000
<LANGUAGE>ENG
<FI>
<ORG>Citigroup
<FID>24909
</FI>
</SONRS>
</SIGNONMSGSRSV1>
</OFX>

请注意,这是实际输出的缩写形式,但足以说明问题。问题是我无法弄清楚如何使用 JAXB 来解组这些内容。它不是格式良好的 XML,因为 (1) 它没有 XML 标头,(2) 自定义处理指令(上面的前九行)未包含在 <?...?> 标记中,以及 (3 ) 最重要的是,simpleTypes 只有开始标签,没有结束标签。

我已经到处寻找答案,并在几个地方发现了类似的 XML-ish 格式,其中一个地方表明这甚至可能是通过 Web 发送 XML 的有效格式。但我还没有找到任何可以帮助我解组或解析它的信息。

有没有人有什么建议?当涉及到这些类型的问题时,我通常非常足智多谋(因此这是我在这里的第一个问题),但这个问题让我很难过。提前感谢您提供的任何帮助。

4

2 回答 2

1

您的基本问题是您在此处显示的输入不是 XML,而是 SGML(请参阅 参考资料DATA:OFXSGML)。您必须对其进行预处理以使其能够被 XML 解析器接受。您必须做的那种预处理将是特定于应用程序的,因为没有通用的机制可以很好地处理它。如果您有 SGML DTD,您可能能够获得诸如omnimark 之类的产品来“主要”修复它。

于 2015-05-13T19:49:36.007 回答
0

好吧,也许您需要以其他方式处理此银行服务,例如,当您从该银行接收数据时,可能会读取 Stream 并且可能尝试取消标记的开头,然后(逐行读取链接)的结尾流的其余部分..自由意志。之后剩下的字符串就是您需要的 XML,因此将它传递给您已经实现的 JAXB 代码。

于 2015-05-13T20:13:05.410 回答