所以我想爲.xml數據原料轉化:.XML轉換爲.csv飼料
到.csv格式,但這種格式
我有重複的元素,如「標題」,「描述」等,我想從完全垂直的XML格式,並將每個元素分解成一個單獨的列。
我發現一個tool,我相信正是這樣做的,但我不知道如何設置它
我有兩個文件 - 一個.BAT和.jar。在將.bat,我們有以下默認代碼:
java -jar xml2csv-conv.jar %*
我不知道我該怎麼去修改這個。有誰能提供一些建議嗎?
所以我想爲.xml數據原料轉化:.XML轉換爲.csv飼料
到.csv格式,但這種格式
我有重複的元素,如「標題」,「描述」等,我想從完全垂直的XML格式,並將每個元素分解成一個單獨的列。
我發現一個tool,我相信正是這樣做的,但我不知道如何設置它
我有兩個文件 - 一個.BAT和.jar。在將.bat,我們有以下默認代碼:
java -jar xml2csv-conv.jar %*
我不知道我該怎麼去修改這個。有誰能提供一些建議嗎?
我不確定頻道部分是否重複,但項目部分顯然是。要將其變成一個理想的CSV結構,您需要知道重複的<item>
s的數量。因爲你需要知道你需要提供多少列。
無論如何 - 數據在您的案例中以這樣的方式構建:密鑰的名稱是標籤的名稱,其內容是值。
我的建議是嘗試將XPath來你的情況是這樣的:
<root>
<record id="1">
<keyA>val_1A</keyA>
<keyB>val_1B</keyB>
</record>
<record id="2">
<keyA>val_2A</keyA>
<keyB>val_2B</keyB>
</record>
<record id="3">
<keyA>val_3A</keyA>
<keyB>val_3B</keyB>
</record>
</root>
隨着xmlstarlet你可以解析這個XML文檔(的test.xml):
xmlstarlet \
sel -T -t -m /root/record \
-v "concat(@id,';',keyA,';',keyB)" \
-n test.xml
1;val_1A;val_1B
2;val_2A;val_2B
3;val_3A;val_3B
您可以進一步找到以下教程中的示例和更多解釋:
您可以編寫非常簡單的Python腳本,該腳本使用lxml讀取XML,並使用Python標準庫中的csv模塊編寫CSV。
xml_to_csv.py
:
import argparse
import csv
from lxml import etree
import sys
def main():
p = argparse.ArgumentParser()
p.add_argument('xml_file')
args = p.parse_args()
xml_str = open(args.xml_file, 'rb').read()
root = etree.XML(xml_str)
w = csv.DictWriter(
sys.stdout,
fieldnames='''
title description link
'''.split())
w.writeheader()
for item in root.findall('./channel/item'):
row = {
'title': item.find('./title').text,
'description': item.find('./description').text,
'link': item.find('./link').text,
}
w.writerow(row)
if __name__ == '__main__':
main()
feed.xml
:
<?xml version="1.0" encoding="iso-8859-1" ?>
<rss version="0.91">
<channel>
<title>Delphi Programming</title>
<item>
<title>How to draw rotated text</title>
<link>http://delphi.about.com/1234.html</link>
<description>This example creates...</description>
</item>
<item>
<title>FutureValue function</title>
<link>http://delphi.about.com/5678.html</link>
<description>Returns the future...</description>
</item>
</channel>
</rss>
用法:
$ pip install lxml # if needed
$ python3 xml_to_csv.py feed.xml
title,description,link
How to draw rotated text,This example creates...,http://delphi.about.com/1234.html
FutureValue function,Returns the future...,http://delphi.about.com/5678.html
什麼是運行在你的輸入文件的批處理文件的結果呢? –
恰恰是這個問題。我覺得自己像個傻瓜,因爲我無法讓它運行我的文件(名爲feed1.xml)。 – user3536576
你的鏈接上的文檔說使用'xml2csv-conv feed1.xml feed1.csv' - 這是行不通的嗎? –