2012-02-13 14 views
0

XStreamを使用して大きなXMLファイル(〜1 GB)をインポートしようとしています。 ObjectInputStreamを使用してストリーミングを読みたいと思っていますが、最初の要素をスキップしてから、いくつかの要素を下に移動する必要があります(下記参照、bag_LVC:Woonplaats要素をインポートする必要があります)。XStream:xstream.createObjectInputStream()で特定の要素を検索する方法

xstreamには何らかの形で、ReaderまたはInputStreamが関心の対象となっています。 XStreamのかXPPドライバのいずれかが、あなたが私に求めてみましょうする方法を持っています

HierarchicalStreamReader xpp = new XppDriver().createReader(xmlFile); 
xpp.moveDown(); // moves to <xb:antwoord> 
xpp.move(); // **would move to <xb:producten>, but it private** 
xpp.moveDown(); // moves to <xb:producten> 
xpp.moveDown(); // moves to <product_LVC:LVC-product> 
st = xstream.createObjectInputStream(xpp); 
BagWoonplaats bw = (BagWoonplaats) st.readObject(); 

:私は私自身のHierarchicalStreamReaderを作成して、右の要素に移動しようとしましたが、あなただけ上下動することができます興味のある要素?

XML

<xb:BAG-Extract-Deelbestand-LVC> 
    <xb:antwoord> 
    <xb:vraag> 
    <!-- more elements here --> 
    </xb:vraag> 
    <xb:producten> 
     <product_LVC:LVC-product> 
     <bag_LVC:Woonplaats> 
      <!-- elements used as fields --> 
     </bag_LVC:Woonplaats> 
     <bag_LVC:Woonplaats> 
      <!-- elements used as fields --> 
     </bag_LVC:Woonplaats> 
     <!-- and so on --> 

答えて

0

この問題の解決策は、実際には非常に些細だった、と私はほとんど恥ずかしいんだけど、とにかく者は、この問題の答えを共有しましょう。私は、HierarchicalStreamReaderのためのAPIを取得していない、私はそれに扱わ得ることができたのXStreamのコードの中を掘った後、これは、それがどのように動作するかです:

HierarchicalStreamReader xpp = ...; 
    while(xpp.hasMoreChildren()) { 
     xpp.moveDown(); 
     // do something with the child element, and recursive into this again if appropriate 
     xpp.moveUp(); 
    } 

これは私が今追求するために使用する再帰的な方法であり、適切な要素に変換します。その位置は、私が事前に正規化したxpath式(もちろん基本的なもの)で指定されています。

関連する問題