كيف أقوم بإنشاء مستند XML في بايثون
سؤال
هنا هو نموذج التعليمات البرمجية الخاص بي:
from xml.dom.minidom import *
def make_xml():
doc = Document()
node = doc.createElement('foo')
node.innerText = 'bar'
doc.appendChild(node)
return doc
if __name__ == '__main__':
make_xml().writexml(sys.stdout)
عندما أقوم بتشغيل الكود أعلاه أحصل على هذا:
<?xml version="1.0" ?>
<foo/>
أود الحصول على:
<?xml version="1.0" ?>
<foo>bar</foo>
لقد خمنت للتو أن هناك خاصية نص داخلي، ولا تعطي أي خطأ في المترجم، ولكن يبدو أنها لا تعمل ...كيف أقوم بإنشاء عقدة نصية؟
المحلول
لن يؤدي تعيين سمة على كائن إلى حدوث خطأ في وقت الترجمة أو وقت التشغيل، بل لن يفعل شيئًا مفيدًا إذا لم يصل الكائن إليه (على سبيل المثال."node.noSuchAttr = 'bar'
"لن يعطي خطأ أيضًا).
إلا إذا كنت بحاجة إلى ميزة محددة minidom
, ، أود أن أنظر ElementTree
:
import sys
from xml.etree.cElementTree import Element, ElementTree
def make_xml():
node = Element('foo')
node.text = 'bar'
doc = ElementTree(node)
return doc
if __name__ == '__main__':
make_xml().write(sys.stdout)
نصائح أخرى
@ دانيال
شكرًا على الرد، لقد اكتشفت أيضًا كيفية القيام بذلك باستخدام minidom (لست متأكدًا من الفرق بين ElementTree وminidom)
from xml.dom.minidom import *
def make_xml():
doc = Document();
node = doc.createElement('foo')
node.appendChild(doc.createTextNode('bar'))
doc.appendChild(node)
return doc
if __name__ == '__main__':
make_xml().writexml(sys.stdout)
أقسم أنني حاولت ذلك قبل نشر سؤالي ...
لقد وجدت ال برنامج تعليمي مطول جدًا حول طريقة minidom
وهنا أ البرنامج التعليمي لطريقة etree.إنها أجمل بكثير للقراءة، وتبدو بسيطة للغاية.ويتناول أيضًا تحليل XML (لفترة وجيزة)