Python xml ElementTree từ một nguồn chuỗi?


117

ElementTree.parse đọc từ một tệp, làm cách nào tôi có thể sử dụng tệp này nếu tôi đã có dữ liệu XML trong một chuỗi?

Có thể tôi đang thiếu một cái gì đó ở đây, nhưng phải có cách sử dụng ElementTree mà không cần viết chuỗi ra tệp và đọc lại.

xml.etree.elementtree


2
Xin chào George, thật tuyệt nếu bạn có thể chấp nhận câu trả lời thứ hai (dgassaway) là câu trả lời đúng.
famargar 26/03/18

Câu trả lời:


89

Nếu bạn đang sử dụng xml.etree.ElementTree.parseđể phân tích cú pháp từ một tệp, thì bạn có thể sử dụng xml.etree.ElementTree.fromstringđể phân tích cú pháp từ văn bản.

Xem xml.etree.EuityTree


38
Vấn đề là ElementTree.fromopes tạo ra một phần tử chứ không phải ElementTree! Bất cứ ai biết làm thế nào để làm việc xung quanh này?
Samuel Lampa

4
Vấn đề tương tự như @SamuelLampa đã đề cập. Tôi không phải là ElementTree, tôi không thể làm getroot()điều này
Siddharth Menon

23
@SamuelLampa xem câu trả lời của dgassaway , sử dụngET.ElementTree(ET.fromstring(xmlstring))
Colin Pickard

6
để biết câu trả lời chính xác, hãy xem câu trả lời được cung cấp bởi @dgassaway
2.718

Đừng quên báo cáo nhập khẩu
Stevoisiak

225

Bạn có thể phân tích văn bản dưới dạng một chuỗi, tạo ra một phần tử và tạo một ElementTree bằng cách sử dụng phần tử đó.

import xml.etree.ElementTree as ET
tree = ET.ElementTree(ET.fromstring(xmlstring))

Tôi vừa gặp vấn đề này và tài liệu, trong khi hoàn thành, không đơn giản lắm về sự khác biệt trong cách sử dụng giữa parse()fromstring()phương thức.


5
Dòng thứ hai có thể đơn giản root = ET.fromstring(xmlstring). Bằng ET.parse('file.xml').getroot(): docs.python.org/3.6/l Library / từ
Anton Tarasenko

3
@Anton, như OP tuyên bố, ý tưởng là tạo ra ElementTree chứ không phải Element. Điều này rất hữu ích, ví dụ, khi bạn muốn sử dụng ElementTree.write ().
batbrat

16

Bạn cần xml.etree.ElementTree.fromstring(text)

from xml.etree.ElementTree import XML, fromstring
myxml = fromstring(text)

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.