Tôi muốn chia một tệp XML thành nhiều tệp. Máy trạm của tôi rất giới hạn ở Sao Hỏa nhật thực với Xalan 2.7.1.
Tôi cũng có thể sử dụng Python, nhưng chưa bao giờ sử dụng nó trước đây.
Doe
Jon
M
Mustermann
Max
M
Làm thế nào tôi có thể biến đổi chúng để trông như thế này
Doe
Jon
M
Tôi cần mọi "hàng" -data trong một tệp duy nhất có tiêu đề. Dữ liệu trên chỉ là một ví dụ. Hầu hết các "hàng" -data đều có 16 thuộc tính, nhưng nó thay đổi theo thời gian.
Đã hỏi ngày 22 tháng 3 năm 2016 lúc 12:59Mar 22, 2016 at 12:59
1
Sử dụng Python ElementTree.
Tạo một tệp, ví dụ: xmlsplitter.py. Thêm mã bên dưới [trong đó File.xml là tệp XML của bạn và giả sử mỗi hàng có một phần tử tên duy nhất.].
import xml.etree.ElementTree as ET
context = ET.iterparse['file.xml', events=['end', ]]
for event, elem in context:
if elem.tag == 'row':
title = elem.find['NAME'].text
filename = format[title + ".xml"]
with open[filename, 'wb'] as f:
f.write["\n"]
f.write[ET.tostring[elem]]
Chạy nó với
python xmlsplitter.py
Hoặc nếu tên không phải là duy nhất:
import xml.etree.ElementTree as ET
context = ET.iterparse['file.xml', events=['end', ]]
index = 0
for event, elem in context:
if elem.tag == 'row':
index += 1
filename = format[str[index] + ".xml"]
with open[filename, 'wb'] as f:
f.write["\n"]
f.write[ET.tostring[elem]]
Đã trả lời ngày 22 tháng 3 năm 2016 lúc 13:17Mar 22, 2016 at 13:17
Dan-DevDan-DevDan-Dev
8.3793 Huy hiệu vàng40 Huy hiệu bạc 50 Huy hiệu Đồng3 gold badges40 silver badges50 bronze badges
4
Đây là mã hoạt động hoàn hảo.
import xml.etree.ElementTree as ET
context = ET.iterparse['filname.xml', events=['end', ]]
for event, elem in context:
if elem.tag == 'row':
title = elem.find['NAME'].text
filename = format[title + ".xml"]
with open[filename, 'wb'] as f:
f.write["\n"]
f.write["\n"]
f.write[ET.tostring[elem]]
f.write[""]
Đã trả lời ngày 22 tháng 3 năm 2016 lúc 13:48Mar 22, 2016 at 13:48
Roger Sánchezroger SánchezRoger Sánchez
871 Huy hiệu vàng1 Huy hiệu bạc7 Huy hiệu đồng1 gold badge1 silver badge7 bronze badges
1
Có một công cụ tuyệt vời //xmlstar.sourceforge.net/docs.php có thể làm rất nhiều với XML [tuy nhiên nó không phải là Pythonic].
Cho bạn có một tệp 1.xml
với dữ liệu như trên. Và bạn cần chia nó để tách các tệp với tên nnn.xml với phần tử /root /hàng.
Chỉ cần gọi trong vỏ:
$ for [[i=1; i NAME.xml;
NAME=$[xmlstarlet sel -t -m '/root/row[position[]='$i']' -v './NAME' 1.xml]; \
xmlstarlet sel -t -m '/root/row[position[]='$i']' -c . -n 1.xml >> $NAME.xml; \
echo '' >> NAME.xml
done
Bây giờ bạn có một loạt các tệp XML như joe.xml
Đã trả lời ngày 22 tháng 3 năm 2016 lúc 14:07Mar 22, 2016 at 14:07
Eugene Lisitskyeugene LisitskyEugene Lisitsky
11.4K4 Huy hiệu vàng35 Huy hiệu bạc57 Huy hiệu đồng4 gold badges35 silver badges57 bronze badges