我正在尝试使用递归技术来检索xml文件。有人可以帮我这么做。
我正在尝试阅读下面的xml,但不确定嵌套标签的深度,所以我想使用递归技术。
<TestSuites>
<TestSuite SuiteName="Regression">
<TestCase TCName="TestCase 1">
<TestStep TSName="TestStep 1"/>
<TestStep TSName="TestStep 2"/>
</TestCase>
<TestCase TCName="TestCase 2">
<TestStep TSName="TestStep 1"/>
<TestStep TSName="TestStep 2"/>
</TestCase>
</TestSuite>
<TestSuite SuiteName="Smoke"/>
<TestSuite SuiteName="Sanity"/>
</TestSuites>
答案 0 :(得分:1)
VBScript为您提供了解析和处理XML结构的tools:
Set xml = CreateObject("MSXML2.DOMDocument")
xml.async = False
xml.load "c:\path\to\foo.xml"
WScript.Echo xml.xml
您可以使用XPath查询语言(以及其他内容)访问文档树中的元素:
Set nodes = xml.selectnodes("//TestStep[@TSName='TestStep 2']")
以上选择树中任何位置的所有TestStep
节点,其属性TSName
的值为TestStep 2
。
获得节点后,您可以阅读或更改其属性:
WScript.Echo nodes.Length
WScript.Echo nodes(0).parentNode.nodeName
WScript.Echo nodes(1).parentNode.nodeName
WScript.Echo nodes(0).text
nodes(0).text = "foo"
WScript.Echo nodes(0).text
WScript.Echo xml.xml
答案 1 :(得分:1)
您需要一个递归Sub来遍历XML文档树。原则上:
Dim oFS : Set oFS = CreateObject("Scripting.FileSystemObject")
Dim sFSpec : sFSpec = oFS.GetAbsolutePathName("..\data\so14975608.xml")
Dim oXML : Set oXML = CreateObject("Msxml2.DOMDocument.6.0")
oXML.load sFSpec
If 0 = oXML.parseError Then
recursiveTraversal oXML.documentElement, 0
Else
WScript.Echo objMSXML.parseError.reason
End If
Sub recursiveTraversal(oElm, nIndent)
WScript.Echo Space(nIndent), oElm.tagName
If 0 < oElm.childNodes.length Then
Dim oChild
For Each oChild In oElm.childNodes
recursiveTraversal oChild, nIndent + 2
Next
Else
If 0 < oElm.attributes.length Then
Dim oAttr
For Each oAttr In oElm.attributes
WScript.Echo Space(nIndent + 1), oAttr.name, oAttr.value
Next
End If
End If
End Sub
示例数据的输出:
TestSuites
TestSuite
TestCase
TestStep
TSName TestStep 1
TestStep
TSName TestStep 2
TestCase
TestStep
TSName TestStep 1
TestStep
TSName TestStep 2
TestSuite
SuiteName Smoke
TestSuite
SuiteName Sanity
基于更详细的计划 - 您需要提取/处理哪些信息 - 您必须学习一些合适的XML文档(start here)以确定要放在上述框架中的函数/属性。
<强> P.S:强>
未购买上述内容的人不会从this中获利。