سؤال

ولدي وثيقة XML "abc.xml":

ولست بحاجة لكتابة وظيفة استبدال (الاسم، NEWVALUE) التي يمكن أن تحل محل العقدة القيمة مع 'اسم' العلامة مع القيمة الجديدة والكتابة مرة أخرى إلى القرص. هل هذا ممكن في بيثون؟ كيف ينبغي أن أفعل هذا؟

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

المحلول

import xml.dom.minidom
filename='abc.xml'
doc = xml.dom.minidom.parse(filename)
print doc.toxml()

c = doc.getElementsByTagName("c")
print c[0].toxml()
c[0].childNodes[0].nodeValue = 'zip'
print doc.toxml()

def replace(tagname, newvalue):
  '''doc is global, first occurrence of tagname gets it!'''
  doc.getElementsByTagName(tagname)[0].childNodes[0].nodeValue = newvalue
replace('c', 'zit')

print doc.toxml()

وانظر minidom التمهيدي و <لأ href = "HTTP: // docs.python.org/library/xml.dom.minidom.html "يختلط =" نوفولو noreferrer "> API المرجعي .

# cat abc.xml
<root>
  <a>
    <c>zap</c>
  </a>
  <b>
  </b>
</root>

نصائح أخرى

وبالتأكيد كان ذلك ممكنا. فإن وحدة xml.etree.ElementTree مساعدتك في تحليل XML، والعلامات إيجاد واستبدال القيم.

إذا كنت تعرف أكثر قليلا حول ملف XML الذي تريد تغييره، وربما يمكنك جعل هذه المهمة أسهل بعض الشيء مما لو كنت بحاجة لكتابة وظيفة عامة التي من شأنها التعامل مع أي ملف XML.

إذا كنت معتادا على DOM إعراب بالفعل، وهناك حزمة xml.dom لاستخدامها بدلا من ElementTree واحد.

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