Python xml ElementTree จากแหล่งสตริง?


118

ElementTree.parse อ่านจากไฟล์ฉันจะใช้สิ่งนี้ได้อย่างไรหากฉันมีข้อมูล XML ในสตริงอยู่แล้ว

บางทีฉันอาจจะพลาดอะไรบางอย่างที่นี่ แต่ต้องมีวิธีใช้ ElementTree โดยไม่ต้องเขียนสตริงลงในไฟล์แล้วอ่านอีกครั้ง

xml.etree.elementtree


2
สวัสดีจอร์จจะดีมากถ้าคุณยอมรับคำตอบที่สอง (dgassaway) เป็นคำตอบที่ถูกต้อง
famargar

คำตอบ:


89

หากคุณใช้xml.etree.ElementTree.parseเพื่อแยกวิเคราะห์จากไฟล์คุณสามารถใช้xml.etree.ElementTree.fromstringเพื่อแยกวิเคราะห์จากข้อความ

ดูxml.etree.ElementTree


39
ปัญหาคือ ElementTree.fromstring สร้างองค์ประกอบไม่ใช่ ElementTree! ใครรู้วิธีแก้ปัญหานี้?
Samuel Lampa

4
ปัญหาเดียวกับที่ @SamuelLampa กล่าวถึง ฉันไม่ใช่ ElementTree ฉันไม่สามารถทำสิ่งgetroot()นี้ได้
Siddharth Menon

23
@SamuelLampa ดูคำตอบของ dgassawayใช้ET.ElementTree(ET.fromstring(xmlstring))
Colin Pickard

6
สำหรับคำตอบที่ถูกต้องโปรดดูคำตอบที่ระบุโดย @dgassaway
2.718

อย่าลืมงบนำเข้า
Stevoisiak

227

คุณสามารถแยกวิเคราะห์ข้อความเป็นสตริงซึ่งสร้างองค์ประกอบและสร้าง ElementTree โดยใช้องค์ประกอบนั้น

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

ฉันเพิ่งเจอปัญหานี้และในขณะที่เอกสารฉบับสมบูรณ์ไม่ตรงไปตรงมามากนักเกี่ยวกับความแตกต่างในการใช้งานระหว่างวิธีการparse()และfromstring()วิธีการ


5
root = ET.fromstring(xmlstring)บรรทัดที่สองอาจจะเป็นเพียงแค่ เท่ากับET.parse('file.xml').getroot(): docs.python.org/3.6/library/…
Anton Tarasenko

3
@Anton ตามสถานะ OP แนวคิดคือการสร้าง ElementTree ไม่ใช่ Element สิ่งนี้มีประโยชน์เช่นเมื่อคุณต้องการใช้ ElementTree.write ()
batbrat

17

คุณต้องการไฟล์ xml.etree.ElementTree.fromstring(text)

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

1

io.StringIOเป็นอีกทางเลือกหนึ่งสำหรับการรับ XML ในxml.etree.ElementTree :

import io
f = io.StringIO(xmlstring)
tree = ET.parse(f)
root = tree.getroot()

Hovever จะไม่มีผลต่อการประกาศ XML ซึ่งถือว่าอยู่ในtree(แม้ว่าจะจำเป็นสำหรับElementTree.write () ) ดูวิธีการเขียนประกาศ XML ใช้ xml.etree.ElementTree

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