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