Làm cách nào tôi có thể chuyển đổi tệp CSV thành XML?


8

Làm cách nào tôi có thể chuyển đổi tệp CSV thành XML?

Có phần mềm nào cho Ubuntu không?


Tôi không hiểu Ba định dạng bạn đề cập là các tệp văn bản đơn giản --- sự khác biệt là về nội dung. Và phạm vi. Bạn có phiền để thêm một ví dụ?
Rmano

1
Bỏ phiếu để mở lại. Tôi cho rằng điều này khá đơn giản và dễ trả lời ;-)
Rinzwind 3/2/2015

1
Tôi ủng hộ Rinzwind, vì tôi chỉ hỏi phần mềm có thể chuyển đổi.
Vitor Mazuco 3/2/2015

Câu trả lời:


7

Trên trang web cộng đồng về chuyển đổi có một liên kết đến một công cụ dòng lệnh được gọi là csv2xml . Vì nó không rõ ràng, bạn có thể muốn chọn một tùy chọn khác.

Ngoài ra còn có đề cập đến một công cụ java có tên csv2xml (cảnh báo: trang web bằng tiếng Đức) và một công cụ dòng lệnh gọi là ff-extractor .

Liên kết cũng có các tham chiếu đến Python, Perl, PHP, XSLT nhưng điều đó có nghĩa là bạn cần tự viết mã trình chuyển đổi.


1
Tôi đã cập nhật một chút với các tài liệu tham khảo trong liên kết 1. Ngoài ra còn có một sản phẩm thương mại gọi là Altova ( altova.com ).
Rinzwind

10

Khi bạn biết định dạng của csvtệp và cấu trúc bạn cần trong xmltệp, việc tạo một tập lệnh có thể xử lý chuyển đổi là khá đơn giản.

Lấy tập tin simple.csv:

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

Bạn có thể tạo xmltập tin sau :

<?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>

Với đoạn script sau:

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

Ngay cả khi bạn chưa bao giờ được mã hóa trước đây, tôi nghĩ rằng điều này nên dễ sử dụng và sửa đổi. Các tập tin được đọc từng dòng trong whilevòng lặp.

IFSlà công cụ xác định trường nội bộ. Các IFS=$','tuyên bố rằng giá trị của tách lĩnh vực là một dấu phẩy. Đây là tiêu chuẩn cho một tệp CSV, nhưng nó có thể được thay đổi khi cần để phù hợp với định dạng tệp đầu vào.

Đối -rsố của readlệnh yêu cầu nó xử lý bất kỳ dấu gạch chéo ngược nào trong tệp của bạn như là một phần của dữ liệu của bạn chứ không phải là một lối thoát cho một ký tự đặc biệt sau.

Đối -a arrysố đặt mỗi cột của tệp của bạn vào một mảng (được đặt tên arry). Các cột trong ví dụ này là tên, tuổi, quốc gia. Nói cách khác, các giá trị giữa các dấu phẩy. Vì vậy, mỗi cột trong dòng được lưu trữ trong một mảng.

Sau đó, văn bản cần thiết xmlchỉ được bọc xung quanh các giá trị và xmldòng được nối vào tệp đầu ra với echo.


@chaskes, nếu bạn sẽ giải thích tùy chọn được sử dụng trong dòng while IFS=$',' read -r -a arry , nó hữu ích cho người khác. Cảm ơn.
alrcal

@BandaMuhammadAlHelal Xong.
cuộc trò chuyện

Làm thế nào bạn sẽ đối phó với dấu phẩy xuất hiện trong các lĩnh vực, được bao quanh bởi dấu ngoặc kép? Như ở "Somename, Jack"vị trí của Jacktrong tập tin đầu vào?
muk.li

1
@ muk.li Dấu tách trường đầu vào (thường là dấu phẩy) được đánh dấu tại dòng bắt đầu: while IFS = $ ','. Giả sử dấu phân cách là dấu hoa thị, bạn chỉ cần đổi nó thành: $ '*'. Vì vậy, trong trường hợp của bạn, nó phải là $ '"' (trích dẫn đơn, trích dẫn kép, trích dẫn đơn). Điều này sẽ hoạt động tốt, nhưng trích dẫn trong vỏ có thể gặp khó khăn và tôi không có cơ hội để kiểm tra nó.
chaskes

1

Một giải pháp khá thân thiện với người dùng (nghĩa là dễ dàng cho các số như tôi) cho thách thức chuyển đổi CSV sang XML là sử dụng trình soạn thảo XML đa nền tảng đẹp có tính năng này tích hợp sẵn. (Tôi đã sử dụng cả trên Ubuntu và Mac OSX 10.10.5; nó cũng có thể thực thi được Windows.)

XMLSpear

Như đã đề cập, nó là một trình soạn thảo XML, nhưng nó bao gồm "nhập khẩu" từ XML sang XML (và Excel-to-XML) trên menu chính của nó:

nhập mô tả hình ảnh ở đây

Nó đã chuyển đổi một tệp CSV 31Mb cho tôi (kết xuất từ ​​cơ sở dữ liệu thư viện gồm 20.000 mục) trong khoảng 15 giây, cho tôi một tệp XML được định dạng tốt để lưu và thao tác.

Là một biên tập viên, nó có nhiều tính năng đáng hoan nghênh khác (chi tiết tại liên kết, ở trên). Tôi không thể tìm thấy đề cập đến bất kỳ giấy phép nào cho nó, nhưng điều này được bao gồm trong "README":

XMLSpear là phần mềm miễn phí cho sử dụng cá nhân.
Vui lòng gửi phản hồi của bạn đến xmlspear@donkeydevelopment.com hoặc trên diễn đàn http://donkeydevelopment.com/forums.

Sử dụng thương mại phải được sự chấp thuận của donkeydevelopment.
Chỉ cần gửi email đến xmlspear@donkeydevelopment.com với chủ đề "yêu cầu cấp phép".

Readme cũng hữu ích bao gồm các nội dung cho tệp .desktop.

Công việc có tốt với tôi theo Ubuntu 18.04 LTS (Gnome) không.


0

Tôi là một fan hâm mộ lớn BaseXdường như có khả năng nhập khẩu:

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


Có thể chỉ ra rằng, dường như, dễ dàng hơn để sử dụng một ứng dụng web:

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

Số tiền cho một plugin hoặc tiện ích mở rộng cho trình duyệt hoạt động với trang tính google.

Tôi cảm thấy nỗi đau của bạn bởi vì nó là một tiện ích có vẻ đơn giản, tốt, nên có sẵn thông qua apt.


0

Tôi sẽ đề nghị bạn hoặc ai đó viết mã bằng Python. Python rất dễ học và giải quyết vấn đề của bạn một cách dễ dàng. Nó có cả mô-đun CSVmô-đun XML . Đề xuất của tôi xem xét rằng bạn có thể cần phải có tên riêng cho các thành phần XML hoặc có các yêu cầu phức tạp khác (như chuyển đổi cột CSV cuối cùng thành thuộc tính của cuối cùng nhưng một cột).

Có rất nhiều hướng dẫn trực tuyến về Python.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.