Seite 1 von 1

XML-Files

Verfasst: Sonntag 16. März 2014, 11:58
von MarcelF6
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.

Re: XML-Files

Verfasst: Sonntag 16. März 2014, 12:09
von fail

Re: XML-Files

Verfasst: Sonntag 16. März 2014, 12:13
von Sirius3
@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"}

Re: XML-Files

Verfasst: Montag 17. März 2014, 12:26
von MarcelF6
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!

Re: XML-Files

Verfasst: Montag 17. März 2014, 22:50
von MarcelF6
Zudem: Wie kann ich den gesamten Text aus einem tag extrahieren, ohne aber den Text in (bspw.) "footnote"?
Danke für jede Hilfe!