2016-12-23 4 views
2

にXML callistを復元し、私は今、私はcsvファイルには、このフォーマットから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 

ですべての私のコールファイルから一つの大きなファイルall.xmlを作成:

<?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

異なるアプローチに-m "*"を変更してみてください属性に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

クールで、私はコンカットの ''\"' 'で引用符を追加しました – rubo77

2

は、個々のXMLを変換する-m "@*"

+0

クールな、これは動作するようです。)しかし、なぜ? – rubo77

+2

'*' anyは要素を選択します。 '@ *'は任意の属性を選択します。 https://www.w3.org/TR/xpath/#path-abbrevを参照してください。 –