xml.etree.ElementTree string extrahieren

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
matthias100
User
Beiträge: 1
Registriert: Samstag 11. Juli 2020, 12:29

Hallo zusammen

ich versuche leider vergeblich aus dem folgenden XML File :

Code: Alles auswählen

<?xml version="1.0" encoding="UTF-8"?>
<DisplayDefinitionTable>
	<rows>
		<row>
			<object_tag tag="tagstr" uid="uidstr"/>
			<row_element column="0" component_tag="223011" property_name="property1">VALUE_STR_1</row_element>
			<row_element column="1" component_tag="223011" property_name="property2">VALUE_STR_2</row_element>
			<row_element column="2" component_tag="223011" property_name="property3">VALUE_STR_3</row_element>
			<row_element column="3" component_tag="223011" property_name="property4">VALUE_STR_4</row_element>
			<row_element column="4" component_tag="223011" property_name="property5">VALUE_STR_5</row_element>
			<row_element column="5" component_tag="1182129" property_name="property6">VALUE_STR_6</row_element>
			<row_element column="6" component_tag="81988" property_name="property7">VALUE_STR_7</row_element>
			<row_element column="7" component_tag="223011" property_name="property8">VALUE_STR_8</row_element>
			<row_element column="8" component_tag="223011" property_name="property9">VALUE_STR_9</row_element>
			<row_element column="9" component_tag="223011" property_name="property10">VALUE_STR_10</row_element>
		</row>
		
	</rows>
</DisplayDefinitionTable>
die Werte zu der property1 zwiwschen den "><" (VALUE_STR_1) zu extrahieren. Versuche es mit dem folgenden Code :

Code: Alles auswählen

from pathlib import Path
import os
import tempfile
import xml.etree.ElementTree as ET

srcpath = Path(__file__).parent.absolute()
os.chdir(srcpath)

tree = ET.parse("example.xml")
root = tree.iter()
#root = tree.getroot()

value= ""
PropertyName =""
for child in root:
     print(child.tag, child.attrib)
     if child.tag == "row_element":
        #print(child.tag,child.attrib)
        PropertyName=child.attrib.get('property_name')
        print('>>',PropertyName)
        value=child.findtext('PropertyName')
        print ("Value from ",PropertyName,":",value)
Die Ausgabe sieht dann wie folgt aus :

Code: Alles auswählen

DisplayDefinitionTable {}
rows {}
row {}
object_tag {'tag': 'tagstr', 'uid': 'uidstr'}
row_element {'column': '0', 'component_tag': '223011', 'property_name': 'property1'} 
>> property1
Value from  property1 : None
Habe alles mögliche versucht. Leider alles vergeblich. Bekomme den String zwischen den "><" nicht extrahiert.
Ich denke das root element enthält diesen Wert gar nicht. Hat jemand eine Idee wie ich an diesen wert komme

Vielen Dank
Jankie
User
Beiträge: 592
Registriert: Mittwoch 26. September 2018, 14:06

Code: Alles auswählen

import xml.etree.ElementTree as ET


tree = ET.parse("TEST.xml")
root = tree.getroot()

for row_element in root.findall("rows/row/row_element"):
    print(row_element.text)
Sirius3
User
Beiträge: 17753
Registriert: Sonntag 21. Oktober 2012, 17:20

os.chdir darf man nicht benutzen. Ist hier auch völlig unnötig, da du den Pfad ja schon in srcpath hast. Einen Iterator über alle Tags root zu nennen ist sehr verwirrend. value und PropertyName werden mit leeren Strings initialisiert, aber nie benutzt. Kann also weg. Variablennamen schreibt man komplett klein. Ein Tag <PropertyName> gibt es nicht, daher kann findtext auch nichts finden.
Antworten