2016-12-27 27 views
0

私はtcldomを使用してスクリプトを作っ:XMLファイルを生成するTCLスクリプトがありますか?

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

しかし、私は、出力は次のようになりたい:私は取得

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> 
     <suite>subscriberServices</suite> 
     <case>jmsServices</case> 
    </testCase> 
</testCases> 

これはforeachを使用していますが、rootのみになります。おそらく、この構造は繰り返し実行され、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> 

はrepetativeが、1つの構造であり、このputputを取得するために、私はこのような出力を得るために、その非常に面倒を助けてください。

+0

は、この種の優れTDOMパッケージ、見てみましょうタスク。 wikiに関するチュートリアルがあり、tdomを検索します。 –

+0

あなたはどのWikiページを見ていましたか? –

+0

Tdomは逆に動作します。すなわち、XMLをrawまたはテキストに変換することは私が理解していることです。xmlgenと呼ばれる別のパッケージがありますが、そのパッケージはインストールされておらず、テスト環境にはインストールできません@Peter – vinay

答えて

0
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 (package)

+0

質問を再フォーマットしました。上記のような出力を得るのを手伝ってください。 – vinay

+0

@vainay:これは? –

+0

ええ、助けてくれてありがとう..私はtest_demo00を作成するために私の要求に応じて少し変更しなければならなかった# – vinay

関連する問題