是否可以使用Axiom流式传输属性的值

时间:2016-12-21 01:14:48

标签: java xml memory axiom

我有一个InputStream,其中包含一个包含嵌套XML层的XML有效内容。有效载荷可能很大,为了尽可能少地使用内存,我需要将所有内容作为流处理。不幸的是,我得到的有效负载包含一个深度嵌套的XML文档,其中包含一个标签,该标签的值为另一个xml文档

<xml>
    <payload>&lt;xml&gt;&lt;another_payload value=&quot;&lt;xml&gt;&lt;xml/&gt;&quot;/&gt;&lt;xml/&gt;<payload/>
<xml/>

当我深入研究这个有效载荷时,你会发现我们看起来像这样:

<another_payload value=&quot;&lt;xml&gt;&lt;xml/&gt;&quot;/>

密切注意,您会注意到another_payload有一个名为value的属性,其中包含另一个大型xml文档

该属性可以包含一个我无法加载到内存中的巨大XML文档。我需要像ElementHelper::getTextAsStream

一样流式传输它

在有人要求之前,我曾试图协商将有效负载设置在原点,以便我能更好地处理它,但由于某种原因,他们不会。

1 个答案:

答案 0 :(得分:0)

Axiom使用StAX API进行XML解析,StAX不支持长属性值的流式传输。

更一般地说,即使Axiom拥有自己的XML解析器,这也很难支持。请考虑以下示例:

https://mywebsite.com/api/v1/login

在这种情况下,解析器在流式传输属性值之前无法解析属性的命名空间。 Axiom要么必须支持某种形式的惰性命名空间解析,要么对属性值流的支持将限于在处理属性值之前可以解析命名空间的情况(对于所有非限定属性都是如此)。 p>