2016-12-23 67 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

'*'任何選擇元素。 '@ *'選擇任何屬性。查看https://www.w3.org/TR/xpath/#path-abbrev –