2016-04-12 16 views
1

私はApache Kafkaを使用して複数のxmlファイルを読み込みます。私は、XMLファイルをフラットファイル(CSVファイルまたはテキストファイル)に変換したい。私は以下の出力例を持っています:Apache KafkaでのXml解析

xmlをdomに変換するのはソリューションかJackson-xmlデータコンバータを使用していると思いますか?

誰でもこれを達成するための最良の解決策についてコメントできますか?ありがとう!

入力1:

<?xml version="1.0" encoding="UTF-8"?> 
<customer> 
    <id>123</id> 
    <firstName>Jane</firstName> 
    <phoneNumbers type="work">555-1111</phoneNumbers> 
</customer> 

入力2:

<?xml version="1.0" encoding="UTF-8"?> 
    <customer> 
     <id>1234</id> 
     <firstName>Bob</firstName> 
     <phoneNumbers type="work">555-1111</phoneNumbers> 
    </customer> 

出力:

<?xml version="1.0" encoding="UTF-8"?><customer><id>123</id><firstName>Jane</firstName><phoneNumbers type="work">555-1234</phoneNumbers></customer> 

<?xml version="1.0" encoding="UTF-8"?><customer><id>1234</id><firstName>Bob</firstName><phoneNumbers type="work">555-1111</phoneNumbers></customer> 

答えて

1

良い質問。それを行うための1つの方法は、あなたがjavaであなたの質問にタグ付けされたので、私はあなたがカフカプロデューサーのJavaクライアントを使用していると仮定します

#!/bin/bash 

>combined.csv 
for xml in *.xml 
do 
    echo "Processing $xml"; 
    id=$({ xmllint --xpath "string(//customer/id)" $xml; echo ","; } | tr "\n" " "); 
    firstname=$({ xmllint --xpath "string(//customer/firstName)" $xml; echo ","; } | tr "\n" " "); 
    phonenumber=$(xmllint --xpath "string(//customer/phoneNumbers)" $xml); 
    line="${id}${firstname}${phonenumber}\n" 
    printf "$line" >> combined.csv 
done 
+0

ああ興味深い解決策。すべてのフィールドをハードコーディングせずに一連のXML全体を反復処理するにはどうすればよいですか?実際のファイルは本当に長く、多くのフィールドを持っています。 – Defcon

+0

私はノードのすべての名前を取得するためにxpathを使用しようとし、それを繰り返します。 –

0

下記をご覧... bashのです。

この場合、thisなどを使用して、プロデューサの実装で変換を行うことができます。