2

再帰的手法を使用して 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>
4

2 に答える 2

1

VBScript は、XML 構造を解析および処理するためのツールを提供します。

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を持つ属性を持つツリー内の任意の場所にあるすべてのノードを選択します。TSNameTestStep 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
于 2013-02-20T18:29:19.727 に答える
1

XML ドキュメント ツリーをトラバースするには、再帰的な Sub が必要です。原則として:

  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 ドキュメント(ここから開始)を調べて、上記のスケルトンに配置する関数/プロパティを決定する必要があります。

PS:

上記を買わなかった人は、これで利益を得ることはできません。

于 2013-02-20T18:32:00.353 に答える