ฉันจะแปลงไฟล์ CSV เป็น XML ได้อย่างไร


8

ฉันจะแปลงไฟล์ CSV เป็น XML ได้อย่างไร

มีซอฟต์แวร์สำหรับ Ubuntu หรือไม่?


ฉันไม่เข้าใจ รูปแบบสามรูปแบบที่คุณพูดถึงเป็นไฟล์ข้อความล้วนความแตกต่างอยู่ในเนื้อหา และขอบเขต คุณต้องการเพิ่มตัวอย่างหรือไม่
Rmano

1
การโหวตเพื่อเปิดอีกครั้ง ฉันคิดว่ามันตรงไปตรงมาและตอบง่าย ;-)
Rinzwind

1
ฉันรองรับ Rinzwind เพราะฉันเพิ่งถามซอฟต์แวร์ที่สามารถแปลงได้
Vitor Mazuco

คำตอบ:


7

บนเว็บไซต์ชุมชนในการแปลงมีการเชื่อมโยงไปยังเครื่องมือบรรทัดคำสั่งที่เรียกว่าcsv2xml เนื่องจากไม่มีการระบายคุณอาจต้องการเลือกตัวเลือกอื่น

นอกจากนี้ยังกล่าวถึงเครื่องมือที่เรียกว่า Java csv2xml (คำเตือน: เว็บไซต์ในภาษาเยอรมัน) และเครื่องมือบรรทัดคำสั่งที่เรียกว่าFF-ระบาย

ลิงค์นี้ยังมีการอ้างอิงถึง Python, Perl, PHP, XSLT แต่นั่นหมายความว่าคุณต้องเขียนโค้ดตัวแปลงเอง


1
ฉันอัพเดทนิดหน่อยด้วยการอ้างอิงในลิงค์ที่ 1 นอกจากนี้ยังมีผลิตภัณฑ์เชิงพาณิชย์ที่เรียกว่า Altova ( altova.com )
Rinzwind

10

เมื่อคุณทราบรูปแบบของcsvไฟล์และโครงสร้างที่คุณต้องการในxmlไฟล์มันค่อนข้างตรงไปตรงมาที่จะสร้างสคริปต์ที่สามารถจัดการกับการแปลงได้

ใช้ไฟล์simple.csv:

Jack,35,United States
Jill,22,United Kingdom

คุณสามารถสร้างxmlไฟล์ต่อไปนี้:

<?xml version="1.0"?>
<Customers>
  <Customer>
    <Name>Jack</Name>
    <Age>35</Age>
    <Country>United States</Country>
 </Customer>
 <Customer>
    <Name>Jill</Name>
    <Age>22</Age>
    <Country>United Kingdom</Country>
 </Customer>
</Customers>

ด้วยสคริปต์ต่อไปนี้:

#!/bin/bash
file_in="simple.csv"
file_out="simple.xml"
echo '<?xml version="1.0"?>' > $file_out
echo '<Customers>' >> $file_out
while IFS=$',' read -r -a arry
do
  echo '  <Customer>' >> $file_out
  echo '    <Name>'${arry[0]}'</Name>' >> $file_out
  echo '    <Age>'${arry[1]}'</Age>' >> $file_out
  echo '    <Country>'${arry[2]}'</Country>' >> $file_out
  echo '  </Customer>' >> $file_out
done < $file_in
echo '</Customers>' >> $file_out

แม้ว่าคุณจะไม่เคยเขียนรหัสมาก่อนฉันคิดว่าควรใช้และแก้ไขได้ง่าย ไฟล์ถูกอ่านทีละบรรทัดในwhileลูป

IFSเป็นตัวระบุฟิลด์ภายใน การIFS=$','ประกาศว่าค่าของตัวคั่นฟิลด์เป็นเครื่องหมายจุลภาค นี่เป็นมาตรฐานสำหรับไฟล์ CSV แต่สามารถเปลี่ยนแปลงได้ตามต้องการเพื่อให้ตรงกับรูปแบบไฟล์อินพุต

-rอาร์กิวเมนต์readคำสั่งบอกว่ามันจะรักษาเครื่องหมายใด ๆ ในไฟล์ของคุณเป็นส่วนหนึ่งของข้อมูลของคุณมากกว่าที่จะเป็นที่หลบหนีสำหรับอักขระพิเศษดังต่อไปนี้

-a arryอาร์กิวเมนต์สถานคอลัมน์ของไฟล์ของคุณในแต่ละเป็นอาร์เรย์ (ชื่อarry) คอลัมน์ในตัวอย่างนี้คือชื่ออายุประเทศ กล่าวอีกนัยหนึ่งค่าระหว่างเครื่องหมายจุลภาค ดังนั้นแต่ละคอลัมน์ในบรรทัดจะถูกเก็บไว้ในอาร์เรย์

แล้วข้อความที่จำเป็นสำหรับการxmlเป็นห่อเพียงรอบค่าและบรรทัดถูกผนวกเข้ากับไฟล์ที่ส่งออกด้วยxmlecho


@chaskes หากคุณจะอธิบายตัวเลือกที่ใช้ในบรรทัดwhile IFS=$',' read -r -a arry มันจะมีประโยชน์สำหรับคนอื่น ขอบคุณ
2560

@BandaMuhammadAlHelal เรียบร้อยแล้ว
chaskes

คุณจะจัดการกับเครื่องหมายจุลภาคที่ปรากฏภายในฟิลด์ล้อมรอบด้วยเครื่องหมายคำพูดคู่ได้อย่างไร ในขณะที่"Somename, Jack"ในสถานที่ของJackในแฟ้มใส่?
muk.li

1
@ muk.li ตัวคั่นฟิลด์อินพุต (โดยปกติคือเครื่องหมายจุลภาค) ถูกทำเครื่องหมายที่บรรทัดเริ่มต้น: ในขณะที่ IFS = $ ',' สมมติว่าตัวคั่นเป็นเครื่องหมายดอกจันคุณจะเปลี่ยนเป็น: $ '*' ดังนั้นในกรณีของคุณควรเป็น $ '"(คำพูดเดียว, คำพูดสองคำ, คำพูดเดียว) สิ่งนี้ควรใช้งานได้ดี แต่การอ้างอิงในเชลล์สามารถทำให้ยุ่งยากและฉันไม่ได้มีโอกาสทดสอบ
chaskes

1

วิธีแก้ปัญหาที่ใช้งานง่าย (เช่นง่ายสำหรับ numpties อย่างฉัน) กับความท้าทายในการแปลง CSV เป็น XML คือการใช้เครื่องมือแก้ไข XML ข้ามแพลตฟอร์มที่มีคุณลักษณะนี้ในตัว (ฉันใช้ทั้งใน Ubuntu และ Mac OSX 10.10.5 และยังใช้งานได้กับ Windows)

XMLSpear

ดังที่กล่าวไว้เป็นเครื่องมือแก้ไข XML แต่มี "การนำเข้า" CSV-to-XML (และ Excel-to-XML) ในเมนูหลัก:

ป้อนคำอธิบายรูปภาพที่นี่

มันแปลงไฟล์ CSV 31Mb สำหรับฉัน (ดัมพ์จากฐานข้อมูลไลบรารี 20,000 รายการ) ในเวลาประมาณ 15 วินาทีให้ไฟล์ XML ที่มีรูปแบบที่ดีแก่ฉันเพื่อบันทึกและจัดการ

ในฐานะที่เป็นบรรณาธิการมันมีคุณสมบัติต้อนรับอื่น ๆ อีกมากมาย (รายละเอียดที่ลิงค์ด้านบน) ฉันไม่พบการอ้างถึงใบอนุญาตใด ๆ แต่จะรวมอยู่ใน "README":

XMLSpear เป็นซอฟต์แวร์ฟรีสำหรับใช้ส่วนตัว
กรุณาส่งความคิดเห็นเล็กน้อยเพื่อ xmlspear@donkeydevelopment.com http://donkeydevelopment.com/forumsหรือในฟอรั่ม

การใช้งานเชิงพาณิชย์จะต้องได้รับการอนุมัติโดย donkeydevelopment
เพียงส่งอีเมลไปที่ xmlspear@donkeydevelopment.com พร้อมหัวข้อ "คำขอใบอนุญาต"

readme ยังมีเนื้อหาสำหรับไฟล์. desktop

ทำงานได้ดีสำหรับฉันภายใต้ Ubuntu 18.04 LTS (Gnome)


0

ฉันเป็นแฟนตัวยงของBaseXความสามารถในการนำเข้า:

http://docs.basex.org/wiki/CSV_Module


อาจชี้ให้เห็นว่าการใช้แอปพลิเคชันเว็บดูเหมือนว่าง่ายกว่า:

https://webapps.stackexchange.com/q/123959/24327

จำนวนเงินใดที่ปลั๊กอินหรือส่วนขยายของเบราว์เซอร์ที่ทำงานกับ google ชีต

ฉันรู้สึกถึงความเจ็บปวดของคุณเพราะมันเป็นยูทิลิตี้ที่ดูเหมือนง่ายซึ่งควรจะใช้ได้ดีผ่านการใช้งาน


0

ฉันจะแนะนำให้คุณหรือคนเขียนรหัสใน Python Python ง่ายต่อการเรียนรู้และแก้ไขปัญหาของคุณได้อย่างง่ายดาย มันมีทั้งCSV โมดูลและXML โมดูล ข้อเสนอแนะของฉันคำนึงถึงว่าคุณอาจต้องมีชื่อของคุณเองสำหรับองค์ประกอบ XML หรือมีข้อกำหนดที่ซับซ้อนอื่น ๆ (เช่นการแปลงคอลัมน์ CSV ล่าสุดเป็นแอตทริบิวต์ของคอลัมน์สุดท้าย แต่คอลัมน์เดียว)

มีบทเรียนออนไลน์มากมายเกี่ยวกับ Python

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.