Итерация по XML с помощью 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 ответ
Решение
Чтобы добавить пропущенную запятую, вы можете добавить еще одну -v "','"
Во втором столбце вы выбираете с абсолютным выражением xpath из корневого элемента, а не из элемента, соответствующего шаблону, двойная косая черта неверна. Поскольку вам нужна одна строка для каждого теста, я бы перебрал элементы теста и затем добавил атрибут name родительского элемента, например так:
xmlstarlet sel -t -m 'test-report/testsuite/test/testcase' -v '../@name' -v "','" -v '@name' -n $1