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

Is it possible to stream the value of an attribute using Axiom

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

<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

一样进行流式传输

在有人问之前,我曾尝试协商在源头构建有效载荷,以便我可以更好地处理它,但出于某种原因他们不会。

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

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

<some_element p:myattr="...long value..." xmlns:p="http://example.org"/>

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