Цикл по XML-файлу для замены определенных элементов (Python)? - PullRequest
0 голосов
/ 01 апреля 2019

Я пытаюсь перебрать определенный файл XML в python, чтобы заменить определенные строки.Я очень плохо знаком с форматами файлов XML и не знаю, как работают такие библиотеки, как elementTree или minidom.Этот XML-файл выглядит следующим образом:

<?xml version="1.0" encoding="utf-8"?>
<StructureDefinition xmlns="http://hl7.org/fhir">
  <url value="http://example.org/fhir/StructureDefinition/MyPatient" />
  <name value="MyPatient" />
  <status value="draft" />
  <fhirVersion value="3.0.1" />
  <kind value="resource" />
  <abstract value="false" />
  <type value="Patient" />
  <baseDefinition value="http://hl7.org/fhir/StructureDefinition/Patient" />
  <derivation value="constraint" />
  <differential>
    <element id="Patient.identifier.type">
      <path value="Patient.identifier.type" />
      <short value="Description of identifier&#xD;&#xA;YY" />
      <definition value="A coded type for the identifier that can be used to determine which identifier to use for a specific purpose.&#xD;&#xA;YY1" />
    </element>
    <element id="Patient.identifier.type.coding">
      <path value="Patient.identifier.type.coding" />
      <short value="Code defined by a terminology system&#xD;&#xA;XX" />
      <definition value="A reference to a code defined by a terminology system.&#xD;&#xA;XX2" />
    </element>
    <element id="Patient.maritalStatus.coding">
      <path value="Patient.maritalStatus.coding" />
      <short value="Code defined by a terminology system&#xD;&#xA;XX" />
      <definition value="A reference to a code defined by a terminology system.&#xD;&#xA;XX1" />
    </element>
    <element id="Patient.contact.relationship.coding">
      <path value="Patient.contact.relationship.coding" />
      <short value="Code defined by a terminology system&#xD;&#xA;XX" />
      <definition value="A reference to a code defined by a terminology system.&#xD;&#xA;XX1" />
    </element>
    <element id="Patient.contact.organization.identifier.type.coding">
      <path value="Patient.contact.organization.identifier.type.coding" />
      <short value="Code defined by a terminology system&#xD;&#xA;XX" />
      <definition value="A reference to a code defined by a terminology system.&#xD;&#xA;XX1" />
    </element>
  </differential>
</StructureDefinition>

, как вы можете видеть выше, есть места, отмеченные XX (короткое значение) или XX1 (значение определения), которые я хочу заменить некоторым текстом.Кроме того, все места, отмеченные XX, находятся под «коротким значением» некоторого элемента с именем, оканчивающимся на «.coding», а XX1 - под «значением определения» (которое является всеми подэлементами элемента «дифференциального»).Я не могу понять, как это организовать, что у меня есть, как показано ниже:

from xml.dom.minidom import parse # use minidom for this task

dom = parse('C:/Users/Joon/Documents/FHIR/MyPatient.StructureDefinition.xml') #read in your file

replace1 = "replacement text" #set replace value
replace2 = "replacement text2" #set replace value2
res = dom.getElementsByTagName('*.coding') #iterate over tags
for element in res:
    print('true')
    element.setAttribute('short value', replace1)
    element.setAttribute('definition value', replace2)

with open('MyPatientUpdated.StructureDefinition.xml', 'w', encoding='UTF8') as f:
    f.write(dom.toxml()) #update the dom, save as new xml file

Я не могу заставить цикл вывести «true», потому что «res» - пустой список,Любая помощь с благодарностью, заранее спасибо!

...