2016-12-23 12 views
2

Я создал один большой файл all.xml из всех моих файлов вызовов сПреобразовать Журналы вызовов Резервное копирование и восстановление XML Callist в CSV

echo '<?xml version='1.0' encoding='UTF-8' standalone='yes' ?> 
<!--File Created By Call Logs Backup & Restore v3.70 on 23/12/2016 03:02:21--> 
<?xml-stylesheet type="text/xsl" href="calls.xsl"?> 
<calls count="500"> 
'>all.xml 
for i in calls-*.xml; do head -n-1 "$i"|tail -n+5; done>>all.xml 
echo "</calls>">>all.xml 

Теперь я пытаюсь экспортировать Callist из этого формата в формат CSV:

<?xml version='1.0' encoding='UTF-8' standalone='yes' ?> 
<!--File Created By Call Logs Backup & Restore v3.70 on 23/12/2016 03:02:21--> 
<?xml-stylesheet type="text/xsl" href="calls.xsl"?> 
<calls> 
    <call number="+492345678" duration="0" date="1426694707547" type="3" readable_date="18.03.2015 17:05:07" contact_name="Someone" /> 
    <call number="+492345679" duration="3" date="1426695646292" type="2" readable_date="18.03.2015 17:20:46" contact_name="Someone else" /> 
    <call number="+492345670" duration="0" date="1426695687556" type="2" readable_date="18.03.2015 17:21:27" contact_name="Someone" /> 
</calls> 

Я попытался с xmlstarlet:

xmlstarlet sel -B -t -m "//calls/call" -n -m "*" -v . -o , all.xml |less 

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

Я не могу найти с помощью manuals, I found Как получить параметры в CSV?

ответ

2

Другой подход, чтобы преобразовать отдельные XML атрибуты CSV:

xmlstarlet sel -t -m "//calls/call" -v "concat(@number,',',@duration,',',@date,',',@type,',',@readable_date,',',@contact_name)" -n file.xml 

Выход:

 
+492345678,0,1426694707547,3,18.03.2015 17:05:07,Someone 
+492345679,3,1426695646292,2,18.03.2015 17:20:46,Someone else 
+492345670,0,1426695687556,2,18.03.2015 17:21:27,Someone 

+1

Прохладный, я также добавил цитаты с '' \ '' 'в concat – rubo77

2

Попробуйте изменить -m "*" к -m "@*"

+0

круто, это похоже на работу;), но почему? – rubo77

+2

'*' любой элемент select. '@ *' выбирает любой атрибут. Проверьте https://www.w3.org/TR/xpath/#path-abbrev –