سؤال

وماذا كنت تستخدم لتغيير لملف XML مع الحفاظ على أكبر قدر ممكن من التخطيط، بما في ذلك المسافة البادئة والتعليقات؟

ومشكلتي هي أن لدي بضع ضخمة XML ملفات تعديله يدويا تصف واجهة المستخدم، والآن أنا بحاجة لترجمة العديد من السمات إلى لغة أخرى.

ولقد حاولت القيام بذلك باستخدام بيثون + ElementTree، لكنه لم يحفظ لا بيضاء ولا تعليق.

ورأيت XSLT يجري المقترحة لأسئلة مشابهة، ولكن أنا لا أعتقد أن هذا هو بديل في هذه الحالة، لأنني بحاجة إلى القيام ببعض المنطق وعمليات البحث لكل سمة.

وسيكون من الأفضل إذا تم الحفاظ على النظام سمة في كل عنصر كذلك، ولكن أنا يمكن أن يتسامح أجل تغييره.

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

المحلول

وأي DOM وحدة المعالجة يجب أن تناسب احتياجاتك. التخطيط هو مجرد بيانات النص، حتى انها ممثلة على النحو العقد نص في DOM:

>>> from xml.dom.minidom import parseString
>>> dom = parseString('''\
... <message>
...   <text>
...     Hello!
...   </text>
... </message>''')
>>> dom.childNodes[0].childNodes
[<DOM Text node "u'\n  '">, <DOM Element: text at 0xb765782c>, <DOM Text node "u'\n'">]
>>> text = dom.getElementsByTagName('text')[0].childNodes[0]
>>> text.data = text.data.replace(u'Hello', u'Hello world')
>>> print dom.toxml()
<?xml version="1.0" ?><message>
  <text>
    Hello world!
  </text>
</message>

نصائح أخرى

إذا كنت تستخدم معالج XSLT مثل XT ، ثم يمكنك كتابة تمديد الأساليب في جاوة التي يمكن أن تؤدي أي تحول التعسفي التي تحتاج إليها.

وأما وقد قلت ذلك، ولقد استخدمت بايثون xml.dom.minidom الوحدة النمطية بنجاح لهذا النوع من التحول. يستبقي بيضاء والتخطيط.

scroll top