需要对xml文件中指定的节点进行处理,文件通常1到2M用xml的解析器求个好办法

解决方案 »

  1.   

    DOMDocument和IXMLDOMElement对象。 
    e.g.
            Dim value_node As IXMLDOMNode
            Set value_node = xmlRootElement.selectSingleNode("portType")
      

  2.   

    问楼上,Set value_node = xmlRootElement.selectSingleNode("portType")是不是返回所有相同名字节点的集合?
      

  3.   

    是的,你可以用一个循环来操作。每个子节点不是有父节点吗。具体到哪个父节点下的某个。
    For Each vNode In xmlRootElement.childNodes.Item(0).childNodes
    或For i=0 to xmlRootElement.childNodes.Item(0).childNodes.length-1
    具体的可以参考http://www.w3school.com.cn/xmldom/index.asp
      

  4.   

    查找唯一一个节点用 selectSingleNode(),如果查找一批节点就用 selectNodes(),后者返回一个 IXMLDOMNodeList 列表。
      

  5.   

    问题是selectNodes()也可以返回子节点的子节点吗? 如果名字相同。盼复另外,当我创建子节点的时候总是用动态数组先保存好父节点,然后再append,感觉很麻烦,请教您是怎么处理的?
    Private oXMLDom As MSXML2.DOMDocument
    Private oXMLElement As MSXML2.IXMLDOMElement
    Private oTemElement() As MSXML2.IXMLDOMElement
    Private oNodeAttr As MSXML2.IXMLDOMAttributePrivate Sub Generate_Click()    Dim oThisNode As MSXML2.IXMLDOMNode
    '<--Create a new DOMDoc and then set the root element
        Set oXMLDom = CreateObject("MSXML2.DOMDocument")
        oXMLDom.async = False
        oXMLDom.validateOnParse = False
        Set oXMLElement = oXMLDom.createElement("Root")
        Set oXMLDom.documentElement = oXMLElement
        
    '<--Create the child nodes and set the attributes(or values) if needed
        ReDim oTemElement(0)
        Set oTemElement(0) = oXMLDom.createElement("Node")
        oXMLElement.appendChild oTemElement(0)
        oTemElement(0).setAttribute "NodeAttr", "AttributeOfThisNode"
        
    '<--Using dynamic object array to create nodes(attribute node)
        ReDim Preserve oTemElement(UBound(oTemElement) + 1)
        Set oTemElement(UBound(oTemElement)) = oXMLDom.createElement("ChildNode")
        oTemElement(UBound(oTemElement) - 1).appendChild oTemElement(UBound(oTemElement))
        
        Set oNodeAttr = oXMLDom.createAttribute("ChildNodeAttri")
        oTemElement(UBound(oTemElement)).setAttributeNode oNodeAttr
        oNodeAttr.Value = "ValueOfThisNodeAttr"
        
        oTemElement(UBound(oTemElement)).Text = "Value Of this Element Node"
        
        Save.Enabled = True
        
     End Sub
      

  6.   

    可以的。
    两个函数的参数都是用 XPath 进行查找的,具体看一下 MSDN 中的 XPath 说明。