Code: Alles auswählen
import xml.etree.ElementTree as ET
import pandas as pd
import uuid
Data = ET.parse('xml_file.xml')
root = Data.getroot()
## Read excel list
df = pd.read_excel('ReplaceList_UUID.xlsx')
print(df)
## Preparation of searchList
searchList = pd.concat([df['Code_alphanumeric']], axis=0, ignore_index=False)
searchList = searchList.reset_index(drop=True) # reset index from 0 .. i
searchList = searchList.astype(str)
print(searchList)
## Preparation of output expressions
resultList = pd.concat([df['Code_numeric']], axis=0, ignore_index=False)
resultList = resultList.reset_index(drop=True)
resultList = resultList.astype(str)
print(resultList)
## Replacement function Codes
############################################
for i in range(len(searchList)):
for Code in root.iter('Code'): # iterates over the child named 'Code' and builds callable object
if Code.text == searchList[i]: # condition for replacement
Code.text = str(resultList[i]) # what to replace with
ET.tostring(root) # described input string should replace child value
else:
pass
Data.write(str('Code')) # overwrites the defined child Code's
# Check if replacements worked
# for Code in root.iter('Code'):
# print(Code.text)
## Write output xml file with Codes
#############################################
Data.write('xml_file.xml', encoding='utf-8')
Nun muss ich aber auch die ID's unter dem Attribut "TID" im xml verändern. Ich werde sich mit UUID ersetzen. Die UUIDs konnte ich erstellen. Allerdings schaff ich es nicht, die UUIDs gemäss einer ähnlichen Suchen-Ersetzen Funktion wie oben einzufügen. Ich kann nur einzelne Werte aufrufen und verändern:
Code: Alles auswählen
from xml.dom import minidom
xmldoc = minidom.parse("GeologyModelLookUp_V3.0_00.xml")
cl = xmldoc.getElementsByTagName('GeologyModelLookUp_V3_0.Geology_Catalogues.Unconsolidated_Deposits_PT_Kind')
for i in range(3930): # beste Lösung bisher
if cl_object.attributes['TID'].value == searchList[i]:
cl_object.attributes['TID'].value = uuidList[i]
else:
pass
print(cl_object.attributes['TID'].value)
Kann mir jemand dabei helfen?
Mein xml:
Code: Alles auswählen
<?xml version="1.0" encoding="UTF-8"?>
<TRANSFER>
<DATASECTION>
<Model.Catalogues BID="b001">
<Model.Catalog.Class1 TID="Runc101001">
<Code>Runc101001</Code>
<Kind>
<Text>erratischer Block</Text>
</Kind>
</Model.Catalog.Class1>
<Model.Catalog.Class1 TID="Runc101002">
<Code>Runc101002</Code>
<Kind>
<Text>Schwarm erratischer Blöcke</Text>
</Kind>
</Model.Catalog.Class1>
<Model.Catalog.Class2 TID="Runc104001">
<Code>Runc104001</Code>
<Rock_Spe>
<Text>Konglomerat</Text>
</Rock_Spe>
</Model.Catalog.Class2>
<Model.Catalog.Class2 TID="Runc104002">
<Code>Runc104002</Code>
<Rock_Spe>
<Text>Gabbro</Text>
</Rock_Spe>
</Model.Catalog.Class2>
</Model.Catalogues>
</DATASECTION>
</TRANSFER>
Und einen Auszug aus der Excel-Liste:
Nr Code_alphanumeric Code_numeric UUID
452 Runc101001 14401001 UUID6
453 Runc101002 14401002 UUID7
454 Runc101003 14401003 UUID8
455 Runc101004 14401004 UUID9
456 Runc101005 14401005 UUID10
457 Runc101006 14401006 UUID11
458 Runc101007 14401007 UUID12
459 Runc101008 14401008 UUID13
460 Runc102001 14402001 UUID14
461 Runc102002 14402002 UUID15
462 Runc103001 14403001 UUID16
463 Runc103002 14403002 UUID17