1

私はtcldomを使用してスクリプトを作成しました:

package require utils
package require testrunscheduler
package require tdom
tla::TSConfig::init -schedulerContext "Reporting" -environment production
tla::TSDBFactory::getConnection db
set testCaseList [$db doSQL "SELECT root_name,suite_name,case_name FROM ics where test_type = 'tce' limit 1"]
set item [join $testCaseList ""]

set doc [dom createDocument testCases]
set root [$doc documentElement]
set subnode [$doc createElement testCase]
$root appendChild $subnode

foreach item $item {
set node [$doc createElement root]
$node appendChild [$doc createTextNode $item]
$subnode appendChild $node
}

私が得る出力は次のとおりです。

<testCases>
    <testCase>
        <root>SPB</root>
        <root>subscriberServices</root>
        <root>jmsServices</root>
    </testCase>
</testCases>

しかし、出力を次のようにしたい:

<testCases>
    <testCase>
        <root>SPB</root>
        <suite>subscriberServices</suite>
        <case>jmsServices</case>
    </testCase>
</testCases>

私はこれに foreach を使用しましたが、それはルートに対してのみ作成されます。おそらく欠落しています。この構造はそれ自体を繰り返し、SQL クエリからのユーザー入力のように成長します。

<testCases>
    <testCase>
        <root>demoRoot</root>
        <suite>demoSuite</suite>
        <case>demoCase</case>
        <testCase>test_demo001</testCase>
    </testCase>
    <testCase>
        <root>demoRoot</root>
        <suite>demoSuite</suite>
        <case>demoCase</case>
        <testCase>test_demo002</testCase>
    </testCase>
</testCases>

この種の出力を取得するのを手伝ってください。このプットプットを取得するのは非常に面倒です。これは反復的ですが、構造は 1 つです。

4

1 に答える 1

2
package require tdom

set data {
    {demoRoot1 demoSuite1 demoCase1}
    {demoRoot2 demoSuite2 demoCase2}
}

set doc [dom createDocument testCases]
set root [$doc documentElement]

dom createNodeCmd elementNode testCase
dom createNodeCmd elementNode root
dom createNodeCmd elementNode suite
dom createNodeCmd elementNode case
dom createNodeCmd textNode t

foreach line $data {
    lassign $line _root suite case
    # or (if you don't have lassign) foreach {_root suite case} $line break

    $root appendFromScript {
        testCase {
            root {t $_root}
            suite {t $suite}
            case {t $case}
            testCase {t [format {test_demo%03d} [incr num]]}
        }
    }
}

$doc asXML

出力:

<testCases>
    <testCase>
        <root>demoRoot1</root>
        <suite>demoSuite1</suite>
        <case>demoCase1</case>
        <testCase>test_demo001</testCase>
    </testCase>
    <testCase>
        <root>demoRoot2</root>
        <suite>demoSuite2</suite>
        <case>demoCase2</case>
        <testCase>test_demo002</testCase>
    </testCase>
</testCases>

その他の例については、wiki のチュートリアルを参照してください。

ドキュメント: breakforeachformatifincrlassignpackagesettdom (パッケージ)

于 2016-12-28T14:10:21.603 に答える