使用vbscript递归XML文件

时间:2013-02-20 08:50:10

标签: xml vbscript

我正在尝试使用递归技术来检索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>

2 个答案:

答案 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中获利。