我正在使用 VBA 来操作 XML 文件。MS Office - 2013。我添加了库 - Microsoft XML Version6.0。请在下面找到xml以及代码。我正在尝试检索 xml 中的所有 TID 并写在工作表上。但是 selectsinglenode() 只检索第一个节点。我究竟做错了什么?有没有办法使用 selectsinglenode 返回每个 TID?请建议。如果您需要更多信息,请告诉我。
<NDA xmlns="http://www.example.com">
<FileHeader>
<Form>7</Form>
<SID>1521</SID>
</FileHeader>
<Subdivision>
<SID>1521</SID>
<CID>200</CID>
<Version>1</Version>
</Subdivision>
<BC>
<BF>
<BElem>
<BFountain>
<BFeature>
<Start>0</Start>
<End>279</End>
<TType>2</TType>
<SLimit>25</SLimit>
<SIT>3</SIT>
<RBTField>0</RBTField>
<RType>1</RType>
<RParam>0</RParam>
<RParamOp>5</RParamOp>
<TID>4015100639</TID>
</BFeature>
<BFeature>
<Start>0</Start>
<End>279</End>
<TType>1</TType>
<SLimit>50</SLimit>
<SIT>3</SIT>
<RBTField>0</RBTField>
<RType>2</RType>
<RParam>0</RParam>
<RParamOp>5</RParamOp>
<TID>2850474662</TID>
</BFeature>
<BFeature>
<Start>0</Start>
<End>279</End>
<TType>1</TType>
<SLimit>25</SLimit>
<SIT>3</SIT>
<RBTField>0</RBTField>
<RType>1</RType>
<RParam>0</RParam>
<RParamOp>5</RParamOp>
<TID>2563719215</TID>
</BFeature>
<BFeature>
<Start>0</Start>
<End>279</End>
<TType>3</TType>
<SLimit>25</SLimit>
<SIT>3</SIT>
<RBTField>0</RBTField>
<RType>1</RType>
<RParam>0</RParam>
<RParamOp>5</RParamOp>
<TID>1962204848</TID>
</BFeature>
</BFountain>
</BElem>
</BF>
</BC>
</NDA>
以下是代码:
Dim xDoc1 As MSXML2.DOMDocument60
Dim xNodeList1 As MSXML2.IXMLDOMNodeList
Dim xNode1 As MSXML2.IXMLDOMNode
Dim xChildNode1 As MSXML2.IXMLDOMNode
Dim xpathToExtractRow1 As String, XMLNamespaces1 As String
Dim wCompareWorksheet As Excel.Worksheet
Dim sFoundNode As MSXML2.IXMLDOMNode
Set xDoc1 = New MSXML2.DOMDocument60
xDoc1.async = False
xDoc1.validateOnParse = False
XMLNamespaces1 = "xmlns:r='http://www.example.com"
xDoc1.Load ("ABCD.xml")
xDoc1.setProperty "SelectionNamespaces", XMLNamespaces1
xDoc1.setProperty "SelectionLanguage", "XPath"
If xDoc1.parseError.ErrorCode <> 0 Then
Set oErr1 = xDoc1.parseError
Debug.Print oErr1.reason
End If
Set xNodeList1 = xDoc1.SelectNodes("/r:NDA/r:BC/r:BF/r:BElem/r:BFountain/r:BFeature")
z=1
For x = 0 To xNodeList1.Length - 1
bFirstChild = True
If xNodeList1.Item(x).HasChildNodes Then
For i = 0 To xNodeList1.Item(x).ChildNodes.Length - 1
Set sFoundNode = xNodeList1.Item(x).ChildNodes(i).SelectSingleNode("/r:NDA/r:BC/r:BF/r:BElem/r:BFountain/r:BFeature/r:TID")
If Not sFoundNode Is Nothing Then
wCompareWorksheet.Cells(z, 1) = x & "," & i
wCompareWorksheet.Cells(z, 4) = sFoundNode.nodeName
wCompareWorksheet.Cells(z, 6) = sFoundNode.Text
z = z + 1
Else
Debug.Print "sFound is nothing"
End If
Next
End If
Next