无法使用Java和JAXB解组奇怪的XML格式

无法使用Java和JAXB解组奇怪的XML格式,java,xml,jaxb,sgml,Java,Xml,Jaxb,Sgml,我需要使用开放式金融交换(OFX)协议检索金融数据。为了做到这一点,我使用JAXB将对象树封送到指定数据请求参数的XML字符串中,然后将该XML字符串发送到银行的服务器。然后,银行用一个包含请求数据的XML字符串进行响应,我使用JAXB将其解组到一个对象树中。在我尝试的前几家银行中,我以符合已发布的OFX模式的格式良好的XML接收数据,并且我能够使用JAXB轻松地解组数据 然而,当我向花旗集团索取数据时,他们向我发回了以下信息: OFXHEADER:100 DATA:OFXSGML VERSIO

我需要使用开放式金融交换(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>
xheader的
of:100
数据:OFXSGML
版本:102
保安:无
编码:USASCII
字符集:1252
压缩:无
OLDFILEUID:无
NEWFILEUID:无
0
信息
20150513180826
英格
花旗集团
24909
请注意,这是实际输出的缩写形式,但足以说明问题。问题是我不知道如何使用JAXB来解组这些内容。它不是格式良好的XML,因为(1)它没有XML头,(2)自定义处理指令(上面的前九行)没有包含在标记中,(3)最重要的是,SimpleType只有开始标记,没有结束标记

我已经搜索了所有关于这个问题的答案,并在几个地方找到了类似的XML ish格式,其中一个地方指出,这甚至可能是通过web发送XML的有效格式。但我还没有找到任何信息可以帮助我解压或解析它


有人有什么建议吗?当涉及到这些类型的问题时,我通常是相当机智的(因此,这是我在这里的第一个问题),但这一个问题让我感到困惑。提前感谢您提供的任何帮助。

您的基本问题是此处显示的输入不是XML,而是SGML(请参阅
数据:OFXSGML
)。您必须对其进行预处理,以使其为XML解析器所接受。您必须执行的预处理类型将是特定于应用程序的,因为没有通用的机制来很好地处理它。如果您有SGML DTD,您可能能够获得一个产品,例如“大部分”修复它。

好吧,您可能需要以其他方式处理此银行服务,例如,当您从该银行接收数据时,可能会读取流,可能会尝试取消标记的请求,然后是(逐行读取)的结尾溪流的其余部分……自由意志。在这之后,剩下的字符串就是您所需要的XML,所以请通过已经实现的JAXB代码传递它。

感谢SGML提示。使用SGML作为关键字(我以前从未使用过)在这里和web上搜索似乎会产生一些更有用的信息,因此我将努力研究它,也许它会使我能够拼凑出一个解决方案。搜索
of XSGML
——这看起来像一件事。谢谢你,乔治。如果我找不到更简单的方法,你建议的方法绝对是一个选择。谢谢大家的建议。现在,我只是构建了一个黑客解析器,将SGML转换成我需要的XML,然后JAXB解组过程就可以很好地为我工作了。稍后我将回到它来构建更健壮的东西。与此同时,我将把这个问题留待讨论,以防有人提出一个简单、可靠的解决方案。这可能是一个久经考验的解决方案。WRT您的黑客解析器,如果您使用像JavaCC或SableCC这样的解析器生成器工具,您可以发布语法文件吗?也许是为了回答你自己的问题?