我有一个xml结构,如下所示
<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>
所以我必须在Kand cr:ExDate
标记中使用相同名称的元素AdjustmentFactors
。
现在我有两个pojo类,然后我有开始和结束元素标记。
在我的结尾元素标签中,我有以下条件
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);
}
显然,对于“cr:ExDate”元素,如果条件满足并且我无法在adjustFactorObj中获取并设置“cr:ExDate”值。
请建议我如何解决这个问题
答案 0 :(得分: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) {
...
答案 1 :(得分:0)
编写SAX应用程序并不容易。很多人都被更好的表现所吸引,但如果你是本领域的高技能人员,你只会获得更好的表现。大多数最终在SO上询问有关SAX的问题的人可能应该使用不同的工具来完成工作。 (但你没有描述任务,所以我们无法判断。)
在任何情况下,当您使用SAX时,您有责任跟踪上下文。对于大多数情况,堆栈保存元素名称就足够了:在startElement
事件中将元素名称推送到堆栈,将其弹出endElement event
。在这种情况下,当ExDate
到达时,确定其父元素是足够的。