【发布时间】:2016-03-11 07:28:00
【问题描述】:
<RmtInf>
<Strd>
<RfrdDocInf>
<Tp>
<CdOrPrtry>
<Cd>CINV</Cd>
</CdOrPrtry>
</Tp>
<Nb>3501870</Nb>
</RfrdDocInf>
<RfrdDocInf>
<Tp>
<CdOrPrtry>
<Prtry>AGJ</Prtry>
</CdOrPrtry>
</Tp>
<Nb>10090187000155438</Nb>
</RfrdDocInf>
<RfrdDocAmt>
<DuePyblAmt Ccy="SEK">5453.29</DuePyblAmt>
</RfrdDocAmt>
</Strd>
<Strd>
<RfrdDocInf>
<Tp>
<CdOrPrtry>
<Cd>CINV</Cd>
</CdOrPrtry>
</Tp>
<Nb>160120</Nb>
</RfrdDocInf>
<RfrdDocInf>
<Tp>
<CdOrPrtry>
<Prtry>AGJ</Prtry>
</CdOrPrtry>
</Tp>
<Nb>10090187000155438</Nb>
</RfrdDocInf>
<AddtlRmtInf>/ARI/</AddtlRmtInf>
</Strd>
</RmtInf>
while (ap.evalXPath() != -1)
{
if (vn.toElement(VTDNav.FIRST_CHILD, "AmtDtls")) {
do {
amtDetails = getXpathValue(vn, ".//TxAmt/Amt/text()");
// System.out.println("amtDetails:::" + amtDetails);
if (amtDetails != null)
creditNotification.setAmount(new BigDecimal(amtDetails));
} while (vn.toElement(VTDNav.NEXT_SIBLING, "AmtDtls"));
}
vn.push();
// System.out.println("transIndex::" + transIndex);
ap1.selectXPath("/Document/BkToCstmrDbtCdtNtfctn/Ntfctn/Ntry/NtryDtls/TxDtls[" + transIndex
+ "]/RmtInf/Strd");
while (ap1.evalXPath() != -1) {
// System.out.println("sCount::::"+sCount);
custInvType = getXpathValue(vn, "RfrdDocInf[1]/Tp/CdOrPrtry/Cd/text()");
// System.out.println("custInvType:::" + custInvType);
creditNotificationFlag = false;
if (custInvType != null
&& custInvType.equalsIgnoreCase(IBS2BankConstants.TYPE_DEBITCREDITNOTIFICATION_CINV)) {
kidNmbr = getXpathValue(vn, "RfrdDocInf[1]/Nb/text()");
// System.out.println("\tskidNmbr::::" + kidNmbr);
// added as an required by IBS team
creditNotification.setMemo3(kidNmbr);
if (kidNmbr != null) {
creditNotification.setKid(kidNmbr);
if (kidNmbr.matches("^\\d{18}")) {
creditNotification
.setCustomerNumber(IBS2BankUtility.getKidsCustomerNumber(kidNmbr));
// logger.debug("custNumber:::" +
// custNumber);
creditNotification.setInvoiceNumber(IBS2BankUtility.getKidsInvoiceNumber(kidNmbr));
// logger.debug("custInvoice:::" +
// custInvoice);
} else if (kidNmbr.matches("^\\d{10}")) {
creditNotification.setInvoiceNumber(IBS2BankUtility.getKidsInvoiceNumber(kidNmbr));
}
}
}
String prtryCodeType = getXpathValue(vn, "RfrdDocInf[2]/Tp/CdOrPrtry/Prtry/text()");
// System.out.println("prtryCodeType :::" +
// prtryCodeType);
if (prtryCodeType != null
&& prtryCodeType.equalsIgnoreCase(IBS2BankConstants.PROPRIETARY_CODE_AGJ)) {
// added as an required by IBS team
creditNotification.setMemo4(getXpathValue(vn, "RfrdDocInf[2]/Nb/text()"));
}
credNotificationList.add(creditNotification);
}
ap1.resetXPath();
vn.pop();
}
我更新了xml,代码Push()用于保存当前位置的状态,第二个while用于RmtInf有多个Strd,我想遍历它。现在上面的代码可以工作了,但是解析 xml 文件需要很长时间,文件大小为 600 MB。
【问题讨论】:
-
请编辑您的帖子,而不是添加其他信息作为评论。
-
您可以编辑您的帖子,以便我可以更轻松地查看您的 java 代码吗?
-
你能发布你的 getXpathValue() 例程代码吗?
-
我有几个问题: 1. 为什么第二个 evaluateXPath() 路由用 push() 和 pop() 包装? 2.似乎在第一个循环中,退出循环时光标位置重置为原始位置?你那里有一些一致性问题......
-
@user2861637-- 我仍在等待您在回答部分对我的 cmets 的反馈...