Dim objXML As DOMDocument
  Dim nXML As Node
  Dim childnode As Node
  Dim secondnode As Node
  Public Sub EnumSubNode(ParentXMLNode As IXMLDOMNode, NodeGroup As Nodes, ParentNodeKey As String, EnumChild As Boolean)
Dim XMLNode As IXMLDOMNode
Dim XMLAttr As IXMLDOMAttributeDim NodX As NodeFor Each XMLNode In ParentXMLNode.childNodes
Set NodX = NodeGroup.Add(ParentNodeKey, tvwChild)
Set XMLAttr = XMLNode.Attributes.getNamedItem("RoomId")
NodX.Key = "RoomId" & XMLAttr.nodeValue
NodX.Tag = XMLAttr.nodeValue
Set XMLAttr = XMLNode.Attributes.getNamedItem("Title")
NodX.Text = XMLAttr.nodeValueIf EnumChild And XMLNode.hasChildNodes() Then
EnumSubNode XMLNode, NodeGroup, NodX.Key
End If
Next
End SubPublic Function ConstructXMLTree(XMLFile As DOMDocument, Tree As TreeView) As Boolean          
          Dim XMLRoot     As IXMLDOMElement
          Dim XMLNode     As IXMLDOMNode
          Dim XMLAttr     As IXMLDOMAttribute
            
          Dim NodX     As Node
            
          ConstructXMLTree = True
            
          Set XMLRoot = XMLFile.documentElement
          Set XMLNode = XMLRoot.selectSingleNode("Csdn/Forums/Room")
          'Set XMLNode = XMLRoot.selectSingleNode("Room")
            
          Set NodX = TreeView1.Nodes.Add
                  NodX.Key = "Root"
                  NodX.Tag = "Root"
                  Set XMLAttr = XMLNode.Attributes.getNamedItem("Title")
                  NodX.Text = XMLAttr.nodeValue
            
                  If XMLNode.hasChildNodes() Then
                          EnumSubNode XMLNode, TreeView1.Nodes, NodX.Key, True
                  End If
End Function
Private Sub Form_Load()Set objXML = New DOMDocument    If Not objXML.Load("Config.xml") Then
       MsgBox "不能读取Config.xml文件。"
       Exit Sub
    End If
  ConstructXMLTree objXML, Me.TreeView1
End Sub==============Config.xml====================
<?xml version="1.0" encoding="gb2312" ?>
<Config>
<Csdn Title="中国软件" Url="http://www.csdn.net">
<Forums Title="专家门诊">
<Room Title="开发语言">
<Room Title="Visual C++/MFC" BigRoomId="50">
<Room Title="基础类" RoomId="5001"></Room>
<Room Title="非技术类" RoomId="5002"></Room>
<Room Title="界面" RoomId="5003"></Room>
<Room Title="网络编程" RoomId="5004"></Room>
<Room Title="进程/线程/DLL" RoomId="5005"></Room>
<Room Title="ATL/ActiveX/COM" RoomId="5006"></Room>
<Room Title="数据库" RoomId="5007"></Room>
<Room Title="硬件/系统" RoomId="5008"></Room>
<Room Title="HTML/XML" RoomId="5009"></Room>
<Room Title="图形处理/算法" RoomId="5010"></Room>
<Room Title="Visual C++ 资源" RoomId="5011"></Room>
</Room>
<Room Title="Visual Basic" BigRoomId="51">
<Room Title="基础类" RoomId="5101"></Room>
<Room Title="非技术区" RoomId="5102"></Room>
<Room Title="控件" RoomId="5103"></Room>
<Room Title="API" RoomId="5104"></Room>
<Room Title="数据库" RoomId="5105"></Room>
<Room Title="报表" RoomId="5106"></Room>
<Room Title="网络编程" RoomId="5107"></Room>
<Room Title="VBA" RoomId="5108"></Room>
<Room Title="EVB" RoomId="5109"></Room>
<Room Title="VB资源" RoomId="5110"></Room>
</Room>
</Room>
</Forums>
</Csdn>
</Config>

解决方案 »

  1.   

        If Not objXML.Load("Config.xml") Then 
    '->
        If Not objXML.Load(App.Path & "\Config.xml") Then
    EnumSubNode XMLNode, NodeGroup, NodX.Key 
    '->
    EnumSubNode XMLNode, NodeGroup, NodX.Key, True还有属性不存在的问题,看您怎么处理了.
      

  2.   

    可就是不知道下面2属性错在哪呀
    NodX.Key = "RoomId" & XMLAttr.nodeValue
    NodX.Tag = XMLAttr.nodeValue
      

  3.   

    麻烦sonic_andy 再帮我说具体些好吗?
      

  4.   

    VB6很少用
    但找到几个可以参考的外国纲站的例子和源码教程
    http://www.informit.com/articles/article.aspx?p=25084源码
    http://www.informit.com/content/images/art_stephens1_gettingstarted/elementLinks/SaveValuesIndented.zip
      

  5.   

    您可以仔细看看config.xml中的room节点,它们并不是全都包含roomid属性的
    问题出在这句话上:
            Set XMLAttr = XMLNode.Attributes.getNamedItem("RoomId")
      

  6.   

    真心感谢sonic_andy!!!
    你让我在黑夜中看到明灯!!
    真心感谢!
      

  7.   

    不客气,呵呵
    不过如果属性自身不是单独节点的话,我记得应该是用其所在Element对象的getattribute/setattribute方法:)