再论在VB中显示XML数据

bgxy 2002-01-26 11:59:39
我创建了以下格式的XML文件,现想将"date","division","formname","inputprogress","marking","allsheetcount"中的数据显示在VB里所对应的TextBox1~TextBox6,(不使用ADO),我编写了一个函数用来读取内容。
第一次运行成功但第二次运行的时候提示 对象变量或WITH 块为定义,请高手给指点一二,高分相送

<?xml version="1.0" encoding="GB2312"?>
<Project>
<condition>
<date>2001-1-8</date>
<division>a</division>
<formname>b</formname>
<inputprogress>c</inputprogress>
<marking>d</marking>
<allsheetcount>5</allsheetcount>
</condition>
<result>
<item name="北京">1111</item>
<item name="东京">2222</item>
<item name="华盛顿">3333</item></result>
</Project>

'VB代码如下

Dim OBJxmldoc As DOMDocument

Form_load
......
OBJxmldoc.loadxml xxx .xml '省略写的
.....
end sub


'函数如下
Public Function M_Get_Conditiontext(ByVal Par_ConditionName As String) As String
Dim OBJxmlnode As IXMLDOMNode
Dim strtemp As String
strtemp = ""
strtemp = "//condition/" & Par_ConditionName
Set OBJxmlnode = OBJxmldoc.selectSingleNode(strtemp)

M_Get_Conditiontext = OBJxmlnode.Text
Set OBJxmlnode = Nothing

End Function


'读取数据显示在文本框中,我单步执行结果出现如下错误
Private Sub Command4_Click()
Text1.text = M_Get_Conditiontext("date") 'Text1成功读取
Text2.text = M_Get_Conditiontext("Division") '运行到这时'OBJxmlnode 还为Nothing, 并且 OBJxmlnode.Text 提示对象变量或WITH 块为定义

Text3.text = M_Get_Conditiontext("formname")
Text4.text = M_Get_Conditiontext("inputprogress")
Text5.text = M_Get_Conditiontext("marking")
Text6.text = M_Get_Conditiontext("allsheetcount")
End Sub
...全文
108 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
bgxy 2002-01-28
  • 打赏
  • 举报
回复
ltpao(啊炮)同志,果然是大小写问题,呵呵,
Text2.text = M_Get_Conditiontext("Division") 'division
我现在兑现我的承诺送分40

dbcontrols(泰山__帮助你使我感到快乐.)老兄,难道我还不知道引用?别灌水了哦!
dbcontrols 2002-01-28
  • 打赏
  • 举报
回复
工程→引用→Microsoft XML,verson2.0
redfox33 2002-01-28
  • 打赏
  • 举报
回复
brian_zhuang(不长进的阿庄)老兄,你没有明白我的意思,我之所以把它做成方法是因为我把它封装在类中,对外界只提供一个M_Get_Conditiontext方法,只要输入每个要得到节点内容的节点名就可以了。
brian_zhuang 2002-01-27
  • 打赏
  • 举报
回复
是呵,ltpao(啊炮)说得对.看来我还是马大哈了...
brian_zhuang 2002-01-27
  • 打赏
  • 举报
回复
用Dim OBJxmlnode As new IXMLDOMNode 试试.
不过我不是很认同你这样的写法,效率很低.

Dim arrDate As IXMLDOMNodeList
Dim arrDivision as IXMLDOMNodeList
.
.
.

Set arrDate = OBJxmlnode.getElementsByTagName("Date")
Set arrDivision = OBJxmlnode.getElementsByTagName("Division")

.
.

这样获得nodeList后对nodeList(0),nodeList(1),......进行操作会高效.
ltpao 2002-01-27
  • 打赏
  • 举报
回复
注意大小写?Division:division
bgxy 2002-01-27
  • 打赏
  • 举报
回复
真的很难吗?
redfox33 2002-01-27
  • 打赏
  • 举报
回复
我注意大小写,brian_zhuang(不长进的阿庄) 我再按你说的试一试,谢谢
bgxy 2002-01-26
  • 打赏
  • 举报
回复
难道就没有真正的高手了吗?
bgxy 2002-01-26
  • 打赏
  • 举报
回复
100分相送
bgxy 2002-01-26
  • 打赏
  • 举报
回复
我很急,有人能救我吗?
jett 2002-01-26
  • 打赏
  • 举报
回复
关注

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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