سؤال

يا. أرغب في الحصول على ملف config.xml للإعدادات في تطبيق ويب Python.

لقد صنعت car.xml يدويًا. تبدو هكذا:

<car>
    <lights>
        <blinkers>off</blinkers>
    </lights>
</car>

الآن أريد أن أرى ما إذا كان المومضون قيد التشغيل أو يستخدمون ، باستخدام xml.etree.elementtree.

import xml.etree.ElementTree as ET
tree = ET.parse('car.xml')
blinkers = tree.findtext('lights/blinkers')
print blinkers
> off

الآن أريد تشغيل وميض التشغيل وإيقاف تشغيله ، كيف يمكنني القيام بذلك؟

هل كانت مفيدة؟

المحلول

XML هي وسيلة سيئة لتخزين إعدادات التكوين. لأحد ، XML ليس صديقًا للبشر تمامًا في سياق الإعدادات. في عالم Python على وجه الخصوص ، من الأفضل استخدام وحدة الإعدادات (كما علقت AaronMcSmooth). لسوء الحظ ، استخدمت الكثير من المشاريع في عالم Java (MIS؟) XML لإعدادات مما يجعلها اتجاهًا. أود أن أزعم أن هذا الاتجاه تمتص حقًا. استخدم الإعدادات الأصلية (الوحدة النمطية في Python) أو شيء أكثر ودية إنسانية مثل Yaml.

نصائح أخرى

يمكنك إزالة العقد عن طريق الاتصال بالعقدة الأصل remove الطريقة ، وإدراج العقد عن طريق الاتصال et.subelement:

import xml.etree.ElementTree as ET

def flip_lights(tree):
    lights = tree.find('lights')
    state=get_blinker(tree)
    blinkers = tree.find('lights/blinkers')
    lights.remove(blinkers)
    new_blinkers = ET.SubElement(lights, "blinkers")
    new_blinkers.text='on' if state=='off' else 'off'

def get_blinker(tree):
    blinkers = tree.find('lights/blinkers')
    return blinkers.text

tree = ET.parse('car.xml')
print(get_blinker(tree))
# off
flip_lights(tree)
print(get_blinker(tree))
# on
flip_lights(tree)
print(get_blinker(tree))
# off
flip_lights(tree)
print(get_blinker(tree))
# on
tree.write('car2.xml')

دون معالجة مزايا استخدام XML بدلاً من وحدة Python لإدارة ملفات التكوين ، إليك كيفية القيام بما طلبت استخدامه lxml:

>>> from lxml import etree
>>> xml = """<car>
   <lights>
      <blinkers>on</blinkers>
   </lights>
</car>"""
>>> doc = etree.fromstring(xml)
>>> elm = doc.xpath("/car/lights/blinkers")[0]
>>> elm.text="off"
>>> etree.tostring(doc)
'<car>\n   <lights>\n      <blinkers>off</blinkers>\n   </lights>\n</car>'

ألق نظرة على هذه المقالة.

لكن النظر في تعليق AaronMcSmooth أعلاه - قد يكون هذا هو النهج الخاطئ لمشكلتك العامة.

استخدم beautifulStonSoup. هنا هو القسم المتعلق بتعديل XML:

http://www.crummy.com/software/beautifulsoup/documentation.html#modify٪20the٪20Parse٪20Tree

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