vba - 查找节点的xpath

问题描述:

c.Value是表格第一行中单元格的文本(典型值为:名称,类型,重量,货币,但可以是任何内容)。vba - 查找节点的xpath

文件名是从Dir()基本循环到文件夹中的XML的循环。

这些个XML可以具有最低级别的节点“权重”(例如),但根据多个不同的父节点。即这3种不同的xpaths://客户端/个人/重量和/ /客户端/细节/重量和/ /客户端/细节/信息/重量。

我有这样的代码:

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 

我试图让这个列表回:

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

http://msdn.microsoft.com/en-us/library/aa163921(office.10).aspx是一个很好的参考,但我似乎无法找到如何从中的XPath一个孩子节点。我只是设法得到直接的父节点。

您需要先从节点开始继续学习,直到达到文档级别。

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