2016-12-21 2 views
0

XMLのネストされたレイヤーを含むXMLペイロードを含むInputStreamがあります。ペイロードは膨大なものになる可能性があるため、メモリをできるだけ少なくするために、すべてをストリームとして処理する必要があります。 Unfortunatly私が得ようとしているペイロードには、値がの別のxml文書という属性を持つタグを含む、深くネストされたXML文書が含まれています。あなたはanother_payload別の大規模なXMLを保持しているvalueと呼ばれる属性を持っていることがわかりますAxiomを使用して属性の値をストリームすることは可能です

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

細心の注意を払う:私はこのペイロードにドリルダウンすると

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

ことはあなたが私たちにこのようなものに気づくでしょう文書

属性には、メモリにロードできない巨大なXMLドキュメントが含まれている可能性があります。私はそれをちょうど同じようにストリーミングする必要がありますElementHelper::getTextAsStream

誰かが尋ねる前に、ペイロードを原点で構造化して、私がそれをより良く扱うことができるように交渉しようとしましたが、理由はありません。

+0

あなたの質問では、属性の値について話しますが、この例ではXMLがテキストノードとして埋め込まれています(つまり、属性の値ではなく要素の内容)。あなたは質問してください明確にすることはできますか? –

+0

@AndreasVeithen私は、別のXML文書を保持する属性 'value'を持つタグを持つ別のXML文書を含むXML文書を表示するために私の例を拡張しました。 –

答えて

0

AxiomはXML解析にStAX APIを使用し、StAXは長い属性値のストリーミングをサポートしていません。

Axiomが独自のXMLパーサを持っていたとしても、これはサポートするのが難しいでしょう。

この場合、パーサーは属性値をストリーミングする前に属性の名前空間を解決できません。 Axiomは何らかの形の遅延型名前空間解決をサポートする必要があります。あるいは、属性値ストリーミングのサポートは、属性値が処理される前に名前空間を解決できるケースに限定されます(すべての非修飾属性の場合)。

+0

それから私は恐れていました...アンドレアスありがとう。 –

関連する問題