vba - нахождение xpath узла - PullRequest
       3

vba - нахождение xpath узла

0 голосов
/ 20 сентября 2011

c.Value - это текст из ячейки (типичные значения: имя, тип, вес, валюта, но может быть любым) в первой строке листа.

filenames - это цикл из Dir () в основном зацикливание XML-файлов в папке.

Эти xmls могут иметь наименьший уровень узла (например, «вес»), но в нескольких разных родительских узлах.Т.е. эти 3 разных xpaths: // Client / personal / weight и // Client / details / weight и //Client/details/info/weight.

У меня есть этот код:

   Dim aDoc As DOMDocument
    Dim aNode As IXMLDOMNode
    Set aDoc = LoadXmlDoc(filenames(f))
    Set aNodes = aDoc.getElementsByTagName(c.Value)
For f = 1 To UBound(filenames)
    If aNodes.Length > 0 Then 'if at least one node is present
       For Each aNode In aNodes 'loop thru each occurence of a node
          c.Offset(f, 0).Value = aNode.Text & "parent is " & aNode.parentNode.parentNode
       Next
    End If
Nxt f

Я пытаюсь получить отдельный список xpath для дочернего узла, который я указываю в c.value.

Например,

if c.value is weight

I 'Я пытаюсь вернуть этот список:

//Client/personal/weight
//Client/details/weight
//Client/details/info/weight.

http://msdn.microsoft.com/en-us/library/aa163921(office.10).aspx - хорошая ссылка, но я не могу найти, как получить xpath от дочернего узла.Мне только удалось получить непосредственный родительский узел.

1 Ответ

1 голос
/ 20 сентября 2011

Вы должны начать с узла и пройтись по его родителям, пока не достигнете уровня документа.

Sub Tester()

    Dim oDoc As New MSXML2.DOMDocument
    Dim oNodes As MSXML2.IXMLDOMNodeList
    Dim oNode As MSXML2.IXMLDOMNode
    Dim pNode As MSXML2.IXMLDOMNode
    Dim XML As String, sPath As String

    XML = "<Client><LastName>Bill</LastName><FirstName>Gates</FirstName>" & _
    "<MiddleName/><Suffix/><DateOfBirth>30-May-1968</DateOfBirth>" & _
    "<PlaceOfBirth/><SSN>n/a</SSN><Gender>Male</Gender><District>" & _
    "<City>SHELTON</City><Mayor>wong</Mayor></District><State>WA</State>" & _
    "<Zip>96484</Zip></Client>"

    oDoc.LoadXML XML

    Set oNodes = oDoc.getElementsByTagName("City")
    If oNodes.Length > 0 Then

        For Each oNode In oNodes
            sPath = oNode.nodeName
            Set pNode = Nothing
            Do
                If pNode Is Nothing Then
                    Set pNode = oNode.ParentNode
                Else
                    Set pNode = pNode.ParentNode
                End If

                If pNode.nodeTypeString <> "document" Then
                    sPath = pNode.nodeName & "/" & sPath
                Else
                    sPath = "//" & sPath
                    Exit Do
                End If
            Loop
            Debug.Print sPath
        Next oNode
    End If

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...