How to parse XML using vba

前端 未结 8 1095
不思量自难忘°
不思量自难忘° 2020-11-22 08:46

I work in VBA, and want to parse a string eg



        
相关标签:
8条回答
  • 2020-11-22 09:28

    Thanks for the pointers.

    I don't know, whether this is the best approach to the problem or not, but here is how I got it to work. I referenced the Microsoft XML, v2.6 dll in my VBA, and then the following code snippet, gives me the required values

    Dim objXML As MSXML2.DOMDocument
    
    Set objXML = New MSXML2.DOMDocument
    
    If Not objXML.loadXML(strXML) Then  'strXML is the string with XML'
        Err.Raise objXML.parseError.ErrorCode, , objXML.parseError.reason
    End If
     
    Dim point As IXMLDOMNode
    Set point = objXML.firstChild
    
    Debug.Print point.selectSingleNode("X").Text
    Debug.Print point.selectSingleNode("Y").Text
    
    0 讨论(0)
  • 2020-11-22 09:30

    Here is a short sub to parse a MicroStation Triforma XML file that contains data for structural steel shapes.

    'location of triforma structural files
    'c:\programdata\bentley\workspace\triforma\tf_imperial\data\us.xml
    
    Sub ReadTriformaImperialData()
    Dim txtFileName As String
    Dim txtFileLine As String
    Dim txtFileNumber As Long
    
    Dim Shape As String
    Shape = "w12x40"
    
    txtFileNumber = FreeFile
    txtFileName = "c:\programdata\bentley\workspace\triforma\tf_imperial\data\us.xml"
    
    Open txtFileName For Input As #txtFileNumber
    
    Do While Not EOF(txtFileNumber)
    Line Input #txtFileNumber, txtFileLine
        If InStr(1, UCase(txtFileLine), UCase(Shape)) Then
            P1 = InStr(1, UCase(txtFileLine), "D=")
            D = Val(Mid(txtFileLine, P1 + 3))
    
            P2 = InStr(1, UCase(txtFileLine), "TW=")
            TW = Val(Mid(txtFileLine, P2 + 4))
    
            P3 = InStr(1, UCase(txtFileLine), "WIDTH=")
            W = Val(Mid(txtFileLine, P3 + 7))
    
            P4 = InStr(1, UCase(txtFileLine), "TF=")
            TF = Val(Mid(txtFileLine, P4 + 4))
    
            Close txtFileNumber
            Exit Do
        End If
    Loop
    End Sub
    

    From here you can use the values to draw the shape in MicroStation 2d or do it in 3d and extrude it to a solid.

    0 讨论(0)
提交回复
热议问题