我正在编写这个VBA脚本,以自动化自动化结果的制表。我尝试解析的节点示例如下:
> <test id="41">
> <name>7.1.1.4_BandI_PS</name>
> <ttcnTestCaseName>7.1.1.4</ttcnTestCaseName>
> <numberOfIterations>1</numberOfIterations>
> <failureAction selected="Continue"/>
> <runMode>Normal</runMode>
> <testPicsPixitDeviation>
> <picsPixitDeviationTag>BandI</picsPixitDeviationTag>
> <picsPixitDeviationTag>PS</picsPixitDeviationTag>
> <picsPixitDeviationTag>NonCipher</picsPixitDeviationTag>
> </testPicsPixitDeviation>
> <comment/>
> <result iterationIndex="0" repeatIndex="0">
> <status>
> <status>Passed</status>
> </status>
> <resultLocation>C:\result_arch\MAC_D12wk47_v10-tc_7_1_1_4_2013-01-07_15.18.27</resultLocation>
> <startTime>2013-01-07_15.18.26</startTime>
> <executionDuration>120</executionDuration>
> <ptsIpAddress>127.0.0.1</ptsIpAddress>
> </result>
> </test>
> <test id="42">
> <name>7.1.1.8_BandI_CS</name>
> <ttcnTestCaseName>7.1.1.8</ttcnTestCaseName>
> <numberOfIterations>1</numberOfIterations>
> <failureAction selected="Continue"/>
> <runMode>Normal</runMode>
> <testPicsPixitDeviation>
> <picsPixitDeviationTag>BandI</picsPixitDeviationTag>
> <picsPixitDeviationTag>CS</picsPixitDeviationTag>
> <picsPixitDeviationTag>NonCipher</picsPixitDeviationTag>
> </testPicsPixitDeviation>
> <comment/>
> <result iterationIndex="0" repeatIndex="0">
> <status>
> <status>Passed</status>
> </status>
> <resultLocation>C:\result_arch\MAC_D12wk47_v10-tc_7_1_1_8_2013-01-07_15.20.27</resultLocation>
> <startTime>2013-01-07_15.20.27</startTime>
> <executionDuration>104</executionDuration>
> <ptsIpAddress>127.0.0.1</ptsIpAddress>
> </result>
> </test>
从上面可以看出,测试节点可以拥有尽可能多的结果,具体取决于迭代次数。我使用selectNodes方法来解析文件中的所有节点,这可以恢复正确数量的元素。 对于我返回的列表中的每个测试用例,我解析了每个节点的嵌套列表中有多少并返回列表。 问题是不是返回嵌套在每个中,列表返回文本文件中不应该的所有内容。 我的代码如下。
Dim testCase As MSXML2.IXMLDOMNode
For Each testCase In testCaseNamesList
Dim passed, failed, error, totalRunTime, iterationCount As Integer
Dim passPcnt, failPcnt, errorPcnt, averageRunTime As Double
Dim testCaseName As String
Dim testCaseResultList As MSXML2.IXMLDOMNodeList
Set testCaseResultList = testCase.SelectNodes("//result")
MsgBox (testCaseResultList.Length)
testCaseName = testCase.FirstChild.Text
iterationCount = CInt(testCase.SelectSingleNode("//numberOfIterations").Text)
Dim testCaseResult As MSXML2.IXMLDOMNode
For Each testCaseResult In testCaseResultList
一切正常但变量testCaseResultList应该返回每个节点中包含的列表,而是从其他节点返回。我不知道我做错了什么。
答案 0 :(得分:2)
尝试.//result
,因为它将返回上下文节点的所有“结果”后代(testCase
指向的节点)或仅result
将返回所有“结果”子节点上下文节点(但不会返回孙子,曾孙等)。
使用//result
返回文档根目录的所有“结果”后代,它将返回文档中的每个“结果”节点
同样//numberOfIterations
(返回文档根目录的所有“numberOfIterations”后代)应替换为.//numberOfIterations
或仅numberOfIterations
有关详情,请参阅http://www.w3.org/TR/xpath/#path-abbrev的缩写语法指南