Привет, я новичок в xml-файлах в целом, но я пытаюсь заменить определенные строки в xml-файле, используя операторы if в python 3.6. Я искал предложения по использованию ElementTree, но ни одно из сообщений в сети не вполне соответствует моей проблеме, поэтому я здесь.
Мой файл выглядит следующим образом:
<?xml version="1.0" encoding="UTF-8"?> -<StructureDefinition xmlns="http://hl7.org/fhir"> <url value="http://example.org/fhir/StructureDefinition/MyObservation"/> <name value="MyObservation"/> <status value="draft"/> <fhirVersion value="3.0.1"/> <kind value="resource"/> <abstract value="false"/> <type value="Observation"/> <baseDefinition value="http://hl7.org/fhir/StructureDefinition/Observation"/> <derivation value="constraint"/> </StructureDefinition>
хочу заменить
url value="http://example.org/fhir/StructureDefinition/MyObservation"/
что-то вроде
url value="http://example.org/fhir/StructureDefinition/NewObservation"/
с помощью условных операторов - потому что они повторяются несколько раз в других файлах.
Я попытался выполнить цикл поиска xml, чтобы найти точное совпадение строки (что мне удалось), но я не смог удалить или заменить строку (возможно, из-за того, что это не является .txt файлом). Любая помощь с благодарностью!
Ваш образец файла содержит маркер "-" - в ln 3, который может быть пропущен при копировании / вставке для поиска решения.
Входной файл
<?xml version="1.0" encoding="UTF-8"?> <StructureDefinition xmlns="http://hl7.org/fhir"> <url value="http://example.org/fhir/StructureDefinition/MyObservation"/> <name value="MyObservation"/> <status value="draft"/> <fhirVersion value="3.0.1"/> <kind value="resource"/> <abstract value="false"/> <type value="Observation"/> <baseDefinition value="http://hl7.org/fhir/StructureDefinition/Observation"/> <derivation value="constraint"/> </StructureDefinition>
Сценарий
from xml.dom.minidom import parse # use minidom for this task dom = parse('june.xml') #read in your file search = "http://example.org/fhir/StructureDefinition/MyObservation" #set search value replace = "http://example.org/fhir/StructureDefinition/NewObservation" #set replace value res = dom.getElementsByTagName('url') #iterate over url tags for element in res: if element.getAttribute('value') == search: #in case of match element.setAttribute('value', replace) #replace with open('june_updated.xml', 'w') as f: f.write(dom.toxml()) #update the dom, save as new xml file
Выходной файл
<?xml version="1.0" ?><StructureDefinition xmlns="http://hl7.org/fhir"> <url value="http://example.org/fhir/StructureDefinition/NewObservation"/> <name value="MyObservation"/> <status value="draft"/> <fhirVersion value="3.0.1"/> <kind value="resource"/> <abstract value="false"/> <type value="Observation"/> <baseDefinition value="http://hl7.org/fhir/StructureDefinition/Observation"/> <derivation value="constraint"/> </StructureDefinition>