使用xmlstarlet迭代XML

时间:2010-06-18 10:58:56

标签: shell xmlstarlet

我有以下XML:

<?xml version="1.0" encoding="UTF-8"?>
<test-report>
<testsuite>
<test name="RegisterConnection1Tests">
<testcase name="testRregisterConnection001"></testcase>
<testcase name="testRegisterConnection002"></testcase>
</test>
<test name="RegisterConnection2Tests">
<testcase name="testRregisterConnection001"></testcase>
<testcase name="testRegisterConnection002"></testcase>
</test>
</testsuite>
</test-report>

我想要输出:

RegisterConnection1Tests,testRregisterConnection001
RegisterConnection1Tests,testRregisterConnection002
RegisterConnection2Tests,testRregisterConnection001
RegisterConnection2Tests,testRregisterConnection002

我对如何按照我的预期展示孩子感到困惑

xmlstarlet sel -t -m 'test-report/testsuite/test' -v '@name' -v '//testcase/@name' -n $1工作,但只输入:

RegisterConnection1TeststestRregisterConnection001
RegisterConnection2TeststestRregisterConnection001

1 个答案:

答案 0 :(得分:2)

要添加缺少的逗号,您可以添加另一个-v "','" 在你的第二列中,你选择的是根元素的绝对xpath表达式,而不是模板匹配的元素,双斜杠是错误的。因为你想要每个测试用一行,我会迭代testcase元素然后添加父元素的name属性,如下所示:

xmlstarlet sel -t -m 'test-report/testsuite/test/testcase' -v '../@name' -v "','" -v '@name' -n $1