у нас есть сценарий TCL для создания файла XML?

я сделал скрипт, используя 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 для этого, но он делает только для 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>

Пожалуйста, помогите мне получить такой вывод, очень утомительно получать этот вывод, который повторяется, но с одной структурой.


person vinay    schedule 27.12.2016    source источник
comment
Взгляните на пакет tdom, который отлично подходит для такого рода задач. В вики есть учебник, ищите tdom.   -  person Peter Lewerin    schedule 27.12.2016
comment
Какую вики-страницу вы просматривали?   -  person Donal Fellows    schedule 27.12.2016
comment
Tdom работает по-другому, то есть преобразование XML в необработанный или текстовый файл - это то, что я понял, есть еще один пакет с именем xmlgen, но этот пакет не установлен и не разрешен для установки в моей тестовой среде @Peter   -  person vinay    schedule 28.12.2016
comment
@vinay: на самом деле tdom работает в обе стороны. Я использую его как для анализа HTML/XML, так и для его создания.   -  person Peter Lewerin    schedule 28.12.2016
comment
@Peter Lewerin: есть ли какой-нибудь пример сценария, который мог бы помочь мне получить результат, как вы сказали, используя tdom?   -  person vinay    schedule 28.12.2016


Ответы (1)


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>

Дополнительные примеры см. в учебнике на вики.

Документация: break, foreach, format, if, incr, lassign, package, set, tdom (пакет)

person Peter Lewerin    schedule 28.12.2016
comment
я переформатировал вопрос, пожалуйста, помогите мне получить вывод, как указано выше - person vinay; 29.12.2016
comment
@vinay: вот так? - person Peter Lewerin; 29.12.2016
comment
да, это помогает, большое спасибо .. мне пришлось немного изменить в соответствии с моим требованием создать test_demo00 # - person vinay; 05.01.2017
comment
эй, Питер, ты можешь помочь это сделать? у меня есть другой запрос, но связанный с этой проблемой: заголовок stackoverflow.com/questions/18216742/ @Peter Lewerin - person vinay; 18.01.2017