2013-03-05 25 views
1

我使用遞歸方法遍歷xml,並希望確定特定節點是否具有任何屬性。這裏是我試圖使用vbscript獲取xml文件中的屬性

第一種方法:獲得使用foreach循環的所有屬性的列表中,但這種方法的問題,如果任何節點沒有任何屬性,它拋出錯誤

第二種方法:找到由屬性屬性名稱作爲參數傳遞,並驗證它是否返回null,但在這種情況下,我需要所有的屬性名稱方便,從不讓我繼續遞歸方法。

回答

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 
+0

你可以指示使用縮進......?這是強制性的 – user1934035 2013-03-07 10:40:15

+0

另外我試圖將測試套件,測試用例和測試步驟放入字典對象(嵌套字典)中,以及不知道字典如何執行。如果你有這方面的見解。請拋出一些光。 – user1934035 2013-03-07 10:41:42