2017-11-03 10 views
2

私はので、私はKAND AdjustmentFactorsタグに同じ名前を持つ要素cr:ExDateに持ってSAXパーサーJavaで異なるレベルで同じ名前を持つ要素を解析する方法

<cr:TRFCoraxData instrumentId="8590925624" organizationId="4296241518"> 
    <cr:Dividends> 
     <cr:ExDate>2017-02-27T00:00:00+00:00</cr:ExDate> 
     <cr:PeriodEndDate>2017-03-31T00:00:00+00:00</cr:PeriodEndDate> 
     <cr:PeriodDuration>P3M</cr:PeriodDuration> 
    </cr:Dividends> 


    <cr:AdjustmentFactors> 
     <cr:ExDate>2222-05-21T00:00:00+00:00</cr:ExDate> 
     <cr:AdjustmentFactor>0.50000</cr:AdjustmentFactor> 
    </cr:AdjustmentFactors> 

    </cr:TRFCoraxData> 

以下のようなXML構造を有しています。

私は両方のためのpojoクラスを持っているし、私は開始と終了の要素タグを持っています。私の最後の要素タグで

は、私のような条件の下に持っている「CR:EXDATE」のために明らかに

if (element.equals("cr:ExDate")) { 
      dividend.setExDate(tmpValue); 
     }else if (element.equals("cr:DividendEventId")) { 
      dividend.setDividendEventId(tmpValue); 
     }else if (element.equals("cr:AnnouncementDate")) { 
      dividend.setAnnouncementDate(tmpValue); 
     } 
else if (element.equals("cr:ExDate")) { 
      adjustmentFactorObj.setExDate(tmpValue); 
     }else if (element.equals("cr:AdjustmentFactor")) { 
      adjustmentFactorObj.setAdjustmentFactor(tmpValue); 
     } 

以下の条件を満たし、私が取得することはできないですし、ためにadjustmentFactorObjに設定した場合、要素「CR:EXDATE」値。

私はあなたがこのような何かを試すことができます。この問題

+0

私は、StAXではコンテキストを追跡するのがずっと簡単なので、SAXの代わりにStAXに切り替えることをお勧めします。 – Andreas

+0

jibx、castor、jaxbのようなデータバインディングツールを使用することを考えましたか? –

答えて

0

を解決することができますどのように私を提案してください:

boolean isInDivident; // it is a field 

...

if (element.equals("cr:Dividends")) { 
    isInDivident = true; 
} else if ((element.equals("cr:AdjustmentFactors")) { 
    isDivident = false; 
} else if (element.equals("cr:ExDate") && isInDivident) { 
... 
+0

しかし、このbooleanTypeは要素値 –

+0

で毎回再初期化されます。配当/調整ファクタはExDateの前に来るので、パーサがExDateになると、sInDividentは値を正しい値に設定されます –

0

書き込みSAXアプリケーションは容易ではありません。多くの人がより良いパフォーマンスを約束することでそれに魅了されていますが、熟練者であればパフォーマンスは向上します。おそらくSAXに関する質問をしてくれるほとんどの人は、仕事のために別のツールを使用しているはずです。 (ただし、あなたはそのタスクを説明していないので、それを判断することはできません)

いずれにしても、SAXを使用する場合、状況を把握することはお客様の責任です。ほとんどの場合、要素名を保持するスタックで十分です。startElementイベントのスタックに要素名をプッシュし、endElement eventにポップします。この場合、ExDateが到着したときにその親要素が何であるかを判断するのに十分です。

関連する問題