2016-12-21 3 views
0

У меня есть InputStream, который содержит полезную нагрузку XML, содержащую вложенные слои XML. Полезная нагрузка может быть огромной и для того, чтобы использовать как можно меньше памяти, мне нужно обрабатывать все как поток. К сожалению, полезная нагрузка, которую я получаю, содержит глубоко вложенный XML-документ, содержащий тег, у которого есть атрибут, значение которого равно другому документу xml.Можно ли передавать значение атрибута с помощью Axiom

<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

Прежде, чем кто-либо спросит, я попытался договориться о том, что полезная нагрузка структурирована в начале координат, чтобы я мог справиться с ней лучше, но по той или иной причине они не будут.

+0

В вашем вопросе вы говорите о значении атрибута, но пример показывает XML, встроенный в текстовый узел (т. Е. Содержимое элемента, а не значение атрибута). Можете ли вы прояснить вопрос, пожалуйста? –

+0

@AndreasVeithen Я расширил мой пример, чтобы показать XML-документ, содержащий другой XML-документ с тегом, который имеет атрибут 'value', который содержит другой XML-документ. –

ответ

0

Axiom использует API StAX для синтаксического анализа XML, а StAX не поддерживает потоковую передачу длинных значений атрибутов.

В общем, даже если бы у Axiom был собственный синтаксический анализатор XML, было бы сложно поддерживать. Рассмотрим следующий пример:

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

В этом случае, анализатор не может разрешить пространство имен атрибута перед потоковой передачей значения атрибута. Аксиома должна была либо поддерживать некоторую форму ленивого разрешения пространства имен, либо поддерживать потоки значений атрибутов, ограничиваясь случаями, когда пространство имен может быть разрешено до того, как будет обработано значение атрибута (что будет иметь место для всех неквалифицированных атрибутов).

+0

Тогда это, как я боялся ... Спасибо, Андреас. –

Смежные вопросы