关于PBDOM解析xml遍历元素遇到的问题

李哈哈 2017-09-09 08:43:24
xml例子:
'<result>'+&
' <state>true</state>'+&
'<message>成功!</message>'+&
'<data class="CalcResultOut">'+&
'<totalCost>80000</totalCost>'+&
'<insuranceCost>70000</insuranceCost>'+&
'<compensateCost>56000</compensateCost>'+&
'<list>'+&
'<calcProgress>'+&
'<calcName>总费用</calcName>'+&
'<calcMemo>总费用统计</calcMemo>'+&
'<calcBefore>80000.0000</calcBefore>'+&
'<calcAfter>80000</calcAfter>'+&
'</calcProgress>'+&
'<calcProgress>'+&
'<calcName>总保内费用</calcName>'+&
'<calcMemo>总保内费用统计</calcMemo>'+&
'<calcBefore>70000.0000</calcBefore>'+&
'<calcAfter>70000</calcAfter>'+&
'</calcProgress>'+&
'</list>'+&
'<memberNo>194506869</memberNo>'+&
'<name>潘茂飞</name>'+&
' <bookNo>5226351001010004</bookNo>'+&
'</data>'+&
'</result>'

我的解析循环如下:

pbdom_element pbdom_item[]
pbdom_element pbdom_col[]
pbdom_element pbdom_three[]
pbdom_element_data.GetChildElements(pbdom_item[] )

Long ll_r_item,ll_rc_item
Long ll_r_col,ll_rc_col,ll_rcc_col
String ls_col
Long ll_ir
Long i,j
String ls_result_item[]

//第一层节点个数
ll_rc_item = UpperBound(pbdom_item)
IF ll_rc_item > 0 THEN
FOR ll_r_item = 1 To ll_rc_item
//第二层节点个数
pbdom_item[ll_r_item].GetChildElements(pbdom_col)
ll_rc_col = UpperBound(pbdom_col)
IF ll_rc_col > 0 THEN
FOR i = 1 To ll_rc_col
//第三层节点个数
pbdom_col[i].GetChildElements(pbdom_three)
ll_rcc_col = UpperBound(pbdom_three)
IF ll_rcc_col > 0 THEN
FOR j = 1 To ll_rcc_col
ls_result_item[i] += '<'+pbdom_three[j].GetName()+'>' +pbdom_three[j].GetText() +'</'+pbdom_three[j].GetName()+'>'
NEXT
ls_result_item[i] = '<item>' + ls_result_item[i] + '</item>'
ls_result += ls_result_item[i]
ELSE //没有第三层 获取二层
ls_result_item[ll_r_item] += '<'+pbdom_col[i].GetName()+'>' +pbdom_col[i].GetText() +'</'+pbdom_col[i].GetName()+'>'
END IF
NEXT
IF ll_rcc_col <= 0 THEN
ls_result_item[ll_r_item] = '<detail>' + ls_result_item[ll_r_item] + '</detail>'
ls_result += ls_result_item[ll_r_item]
END IF
ELSE //没有第二层 获取一层
ls_result += '<'+pbdom_item[ll_r_item].GetName()+'>' +pbdom_item[ll_r_item].GetText() +'</'+pbdom_item[ll_r_item].GetName()+'>'
END IF
NEXT
ls_result = '<result>' + ls_result + '</result>'
//去掉特殊字符,xml不识别的字符
ls_result = Replace(ls_result,'<br>','')
ls_result = Replace(ls_result,'&','')

END IF

一共三层

第一层有 totalCost , insuranceCost ,compensateCost,list, memberNo, name,bookNo。
其中只有list有子节点。
遍历前三个的时候 没有问题,遍历list 也没问题,能解析出list里面的 两个calcProgress 每个有四个元素。
当解析list之后的几个的时候,问题出现了:明明没有子节点 ,却解析出来了 list里面的所有东西,每个都包含list里面的所有内容。不知道问题出在哪里。
有没有大神帮忙研究下?始终找不到问题所在
...全文
913 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
whb00120012 2018-06-26
  • 打赏
  • 举报
回复
每次大循环。
ls_result_item[ll_r_item]=''
whb00120012 2018-06-26
  • 打赏
  • 举报
回复
每次大循环。
ls_result_item[i]=''
WorldMobile 2017-09-11
  • 打赏
  • 举报
回复
有空帮你分析一下,看看代码问题出在哪里了

679

社区成员

发帖
与我相关
我的任务
社区描述
智能路由器通常具有独立的操作系统,包括OpenWRT、eCos、VxWorks等,可以由用户自行安装各种应用,实现网络和设备的智能化管理。
linuxpython 技术论坛(原bbs)
社区管理员
  • 智能路由器社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧