Инструмент xmlstarlet сделает это:
xmlstarlet sel -t -m /A -o ID, -v id -n -o C, -v //C -n -o D, -v //D -n test.xml
Для каждого A под корневым элементом ( -m / A
) он печатает строку «ID», ( -o ID,
), содержимое id ( - v id
), новую строку ( -n
), а также для детей C ( -v // C
) и D ( -v // D
) с соответствующими заголовками. Двойные косые черты - это XPath для «где-нибудь под совпадающим узлом».
Результат, который был протестирован в моей системе с использованием вашего тестового файла, - это разделенный запятыми вывод:
ID,123
C,value1
D,value2
Если вам не нужны заголовки , опустите аргументы -o
.
Спасибо этой статье за объяснение.