XMLからSMSデータを抽出する

XMLからSMSデータを抽出する

大きなSMSメッセージXMLファイルがあります。簡単にアクセスできるcsv形式にしたいです。 「address」、「messageBody」、「messageTime」の部分を具体的に抽出しようとしましたが、成功しませんでした。

<messageType>1</messageType><messageTime>1624297248761</messageTime><read>null</read><status>null</status><service_center>null</service_center><person>null</person><seen>1</seen></chat><chat><threadID>50</threadID><address>447917504050</address><messageBody>Yeah mate let's do lunch and catch up.</messageBody><messageType>1</messageType><messageTime>1629944007697</messageTime><read>null</read><status>null</status><service_center>null</service_center><person>null</person><seen>1</seen></chat><chat><threadID>50</threadID><address>447917563330</address><messageBody>You going now mate</messageBody>

私は次のような小さな成功を収めました。

cat SMS.xml | awk -F'address' '{print $2}'

しかし、これは行の最初の「アドレス」だけを取得し、残りは無視します。

このデータを読み取り可能なcsv形式に変換する方法についてのアイデアはありますか?

「messageTime」セクションの数字を説明するのを手伝ってくれてありがとう。

編集:実際のxmlファイルにはバランスの取れたオープンタグとクローズタグがあり、フォーマットが正しく指定されています。ここではいくつかの内容を抜粋しました。

ベストアンサー1

XMLの形式が正しく、すべてのノードがいくつかの単一ノードの下にchat表示されると仮定すると、rootxqyqhttps://kislyuk.github.io/yq/):

xq -r '["address","messageBody","messageTime"], (.root.chat[] | [.address,.messageBody,.messageTime]) | @csv' file.xml

不足している開始タグと終了タグを追加して質問の破損したXMLを修正すると、次のCSV出力が生成されます。

"address","messageBody","messageTime"
,,"1624297248761"
"447917504050","Yeah mate let's do lunch and catch up.","1629944007697"
"447917563330","You going now mate",

おすすめ記事