4

サイズが 50 MB を超える AIXM5.1 xml ファイルを JAXB を使用して解析しようとしています。この xml を 1 分以内に非整列化できます。しかし、Java オブジェクトを反復処理して XML のフィールドの値をフェッチしようとすると、膨大な時間がかかります。分析した後、xml には、同じ xml 内の xml フラグメントを内部的に参照する xlink があることがわかりました。たとえば、約40000 の xlink 参照があるようです。そのため、xlink で参照されている特定の xml フラグメントを見つけるたびに、オブジェクト全体を反復処理しようとしています。時間がかかっています。

サンプルの xml フラグメントは次のとおりです。

<aixm:geometryComponent>
<aixm:AirspaceGeometryComponent gml:id="ID_2903_1384156119164_17492"><aixm:operation>BASE</aixm:operation>
<aixm:theAirspaceVolume>
<aixm:AirspaceVolume gml:id="ID_2903_1384156119164_17493">
<aixm:upperLimit uom="FL">30</aixm:upperLimit><aixm:upperLimitReference>STD</aixm:upperLimitReference>
<aixm:lowerLimit uom="FT">GND</aixm:lowerLimit><aixm:lowerLimitReference>MSL</aixm:lowerLimitReference>
<aixm:contributorAirspace>
<aixm:AirspaceVolumeDependency gml:id="ID_2903_1384156119164_17494"><aixm:dependency>HORZ_PROJECTION</aixm:dependency>
**<aixm:theAirspace xlink:href="urn:uuid:1c49634e-62ea-4319-bf80-23f3912cef8e">**</aixm:theAirspace>
</aixm:AirspaceVolumeDependency>
</aixm:contributorAirspace>
</aixm:AirspaceVolume>
</aixm:theAirspaceVolume>
</aixm:AirspaceGeometryComponent>
</aixm:geometryComponent>

要素にxlink:href 属性があることがわかった場合、この uuid を介して uuid 値が含まれているため、一致する uuid を持つ Airspace xml フラグメントを見つける必要があります。このように、xml には 40000 以上の参照が存在します。

JAXB を介して xlinks を解決するためにグーグルで調べたところ、JXPath が代替手段であることがわかりました。しかし、継承されたクラスを持つ JXPath に関する例は見つかりませんでした。

誰かがそれに取り組んだか、他の技術を提案してくれたら教えてください。

あなたの助けを楽しみにしています..

4

0 に答える 0