使用vbscript在xml文件中获取属性

时间:2013-03-05 08:13:44

标签: xml vbscript

我正在使用递归方法遍历xml,并希望确定特定节点是否具有任何属性。这是我试过的

第一种方法:使用foreach循环获取所有属性的列表,但这种方法的问题是,如果任何节点没有任何属性,则抛出错误

第二种方法:通过作为参数传递的属性名称查找属性并验证它是否返回null,但在这种情况下,我需要方便地使用所有属性名称,这绝不会让我继续使用递归方法。

1 个答案:

答案 0 :(得分:1)

查看this的人会购买:

第一种方法是正确的。一个简单的实现:

  Dim oFS    : Set oFS = CreateObject("Scripting.FileSystemObject")
  Dim sFSpec : sFSpec  = oFS.GetAbsolutePathName("..\data\so15218800.xml")
  Dim oXML   : Set oXML = CreateObject("Msxml2.DOMDocument.6.0")
  oXML.load sFSpec
  If 0 = oXML.parseError Then
     recursiveTraversalAtt oXML.documentElement, 0
  Else
     WScript.Echo objMSXML.parseError.reason
  End If

Sub recursiveTraversalAtt(oElm, nIndent)
  WScript.Echo Space(nIndent), oElm.tagName
  If 0 < oElm.childNodes.length Then
     If 0 < oElm.attributes.length Then showAttr oElm, nIndent
     Dim oChild
     For Each oChild In oElm.childNodes
         recursiveTraversalAtt oChild, nIndent + 2
     Next
  Else
     If 0 < oElm.attributes.length Then showAttr oElm, nIndent
  End If
End Sub

Sub showAttr(oElm, nIndent)
  Dim oAttr
  For Each oAttr In oElm.attributes
      WScript.Echo Space(nIndent + 1), oAttr.name, oAttr.value
  Next
End Sub

输出:

 TestSuites
   TestSuite
    SuiteName Regression
    TCName TestCase 1
     TestCase
      TCName TestCase 1
      abc 123
       TestStep
        TSName TestStep 1
       TestStep
        TSName TestStep 2
       NoAttr
         TestSuite
          SuiteName Regression
          TCName TestCase 1
           TestStep
            TSName TestStep 1
     TestCase
      TCName TestCase 2
       TestStep
        TSName TestStep 1
       TestStep
        TSName TestStep 2
   TestSuite
   TestSuite
    SuiteName Sanity