2016-04-12 139 views
1

我正在使用Apache Kafka讀取多個xml文件。我想將xml文件轉換爲平面文件(csv文件或文本文件)。我有一個輸出如下:Xml解析Apache Kafka

我認爲將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

好問題。做到這一點的方法之一是bash的...看看下面

#!/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

既然你java標記你的問題,我會假設你使用卡夫卡生產者Java客戶端。

如果是這種情況,那麼你可以使用像this之類的東西在你的Producer實現中進行轉換。