سؤال

هنا هو نموذج التعليمات البرمجية الخاص بي:

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 (لفترة وجيزة)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top