Tag in einer xml Datei ersetzen
Verfasst: Dienstag 11. März 2025, 17:49
Hallo zäme
Ich bin neu hier und habe bis jetzt keine Erfahrung in python. Nun will ich in einem xml File, das folgendermassen beginnt, den Text des Tags <ProjectVersion> durch einen neuen (eine neue Version) ersetzen. Der Rest der Datei soll gleich bleiben.
Beginn der xml Datei:
Nun habe ich das folgendermassen versucht:
Dabei gibt es zwei Probleme:
1. Die Version wird gar nicht updatet. Das heisst, dass das Tag nicht gefunden wurde.
2. In der Ausgabedatei hat es am Anfang jedes Tags so einen namespace Eintrag (ns0:)
<?xml version='1.0' encoding='utf-8'?>
<ns0:Project xmlns:ns0="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Build">
<ns0:PropertyGroup>
<ns0:FileVersion>1.0.0.0</ns0:FileVersion>
<ns0:SchemaVersion>2.0</ns0:SchemaVersion>
<ns0:ProjectGuid>{2d33b7f3-0195-487c-b677-008e32b2b56b}</ns0:ProjectGuid>
Wie löse ich diese beiden Probleme?
Ich bin neu hier und habe bis jetzt keine Erfahrung in python. Nun will ich in einem xml File, das folgendermassen beginnt, den Text des Tags <ProjectVersion> durch einen neuen (eine neue Version) ersetzen. Der Rest der Datei soll gleich bleiben.
Beginn der xml Datei:
Code: Alles auswählen
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<FileVersion>1.0.0.0</FileVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{2d33b7f3-0195-487c-b677-008e32b2b56b}</ProjectGuid>
[b] <ProjectVersion>0.0.0.5</ProjectVersion>[/b]
<SubObjectsSortedByName>True</SubObjectsSortedByName>
<DownloadApplicationInfo>true</DownloadApplicationInfo>
<WriteProductVersion>false</WriteProductVersion>
<GenerateTpy>false</GenerateTpy>
<Name>LibWagnerComponents</Name>
<ProgramVersion>3.1.4024.0</ProgramVersion>
...
</Project>
Code: Alles auswählen
import xml.etree.ElementTree as ET
def update_project_version(file_path, file_path_new, new_version):
# XML-Datei einlesen
tree = ET.parse(file_path)
root = tree.getroot()
# <ProjectVersion>-Tag finden und aktualisieren
for project_version in root.findall('ProjectVersion'):
project_version.text = new_version
# Änderungen in die XML-Datei zurückschreiben
tree.write(file_path_new, encoding='utf-8', xml_declaration=True)
if __name__ == "__main__":
# Name der XML-Datei (im selben Verzeichnis)
xml_file_path = 'Example.xml'
xml_file_path_new = 'Example_new.xml'
# Neue Version
new_version = '0.0.0.10'
# Funktion aufrufen, um die Version zu aktualisieren
update_project_version(xml_file_path, xml_file_path_new, new_version)
print(f'Die <ProjectVersion> wurde auf {new_version} aktualisiert.')
1. Die Version wird gar nicht updatet. Das heisst, dass das Tag nicht gefunden wurde.
2. In der Ausgabedatei hat es am Anfang jedes Tags so einen namespace Eintrag (ns0:)
<?xml version='1.0' encoding='utf-8'?>
<ns0:Project xmlns:ns0="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Build">
<ns0:PropertyGroup>
<ns0:FileVersion>1.0.0.0</ns0:FileVersion>
<ns0:SchemaVersion>2.0</ns0:SchemaVersion>
<ns0:ProjectGuid>{2d33b7f3-0195-487c-b677-008e32b2b56b}</ns0:ProjectGuid>
Wie löse ich diese beiden Probleme?