XML-Files

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
MarcelF6
User
Beiträge: 226
Registriert: Samstag 3. März 2012, 21:30

Hallo zusammen,

ich habe eine Frage: Wie kann ich den Inhalt aller "Untertags" herausfiltern, wenn mein XML-wie folgt aufgebaut ist:

Code: Alles auswählen

<art_text>
    <EditText><text>blablabalahhdjsgff</text><br/></EditText>
    <EditText><text>hshdjsdfhdsfhudsfhxcbcxbhdf</text><br/></EditText>
    <EditText>Abschluss</EditText>
  </art_text>
Konkret möchte ich den Inhalt von "EditText" herausfiltern. Ich mache zur Zeit das:

Code: Alles auswählen

sections = article.find("art_text")
	for sec in sections:
	    text = ""
	    if sec.tag == "EditText":
	        for s in sec:
		    if s.text and re.search(r"\S", s.text):
			text = s.text.rstrip()
		if sec.text and re.search(r"\S", sec.text):
		    text = sec.text.rstrip()
	        yield (text, {"Editorial" : "True"})
Ich komme zwar zum gesamten Inhalt, kann aber nur nur jeden zweiten tag mit "Editorial = True" beschriften. Wieso?
Danke für die Hilfe.
Sirius3
User
Beiträge: 17747
Registriert: Sonntag 21. Oktober 2012, 17:20

@MarcelF6: ich weiß nicht, was Du mit Beschriften von Tags meinst.

Ich würde das ja so lösen:

Code: Alles auswählen

        for sec in article.findall('art_text/EditText'):
            yield ''.join(sec.itertext()).strip(), {"Editorial" : "True"}
MarcelF6
User
Beiträge: 226
Registriert: Samstag 3. März 2012, 21:30

Hallo zusammen,

das Problem ist mittlerweile mehr oder weniger gefixt. :)
Danke auch an Sirius, der mir sehr geholfen hat!

Nun habe ich noch eine Frage. Ich habe momentan folgendes Schema:

Code: Alles auswählen

TAGS = {"rub_titel": False,
        "ausgabe_name": False,
        "marktinfo_text": "MarketInfoText",
        "marktinfo_quelle": "MarketInfoSource",}

# generator that returns text in order with appropriate attributes
    def _textExtractor(self,article):
        for child in article: 
            attr = Transform.TAGS.get(child.tag)
	    print child.tag # alle Haupttags, welche auch im Dict sind.
	yield ("", {})
Was ich nun gerne möchte: wie kann ich durch alle "children" gehen, schauen, ob das child einem in dict entspricht und dann den Text von diesem child (inkl. ALLER SubElemente) mit 'yield' zurückgeben, wobei das zweite 'yield'-Argument das div-Argument im Dict sein soll. Also sowas:

Code: Alles auswählen

if attr:
    yield (''.join(child.itertext()).rstrip(), {attr : "True"})
Danke für jede Hilfe!
MarcelF6
User
Beiträge: 226
Registriert: Samstag 3. März 2012, 21:30

Zudem: Wie kann ich den gesamten Text aus einem tag extrahieren, ohne aber den Text in (bspw.) "footnote"?
Danke für jede Hilfe!
Antworten