Как заменить строки xml, используя операторы if в python? - PullRequest
0 голосов
/ 28 марта 2019

Привет, я новичок в 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 файлом). Любая помощь с благодарностью!

1 Ответ

0 голосов
/ 28 марта 2019

Ваш образец файла содержит маркер "-" - в 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>
...