Frage

Ich bin mit ElementTree und kann nicht herausfinden, ob die childNode Text ist oder nicht. childelement.text scheint nicht zu arbeiten, wie es falsch positive gibt auch auf Knoten, die nicht Textknoten.

Irgendwelche Vorschläge?

Beispiel

<tr>
  <td><a href="sdas3">something for link</a></td>
  <td>tttttk</td>
  <td><a href="tyty">tyt for link</a></td>
</tr>

Wenn Sie diese XML-Datei Parsen, das tue ich dies in Python:

for elem_main in container_trs: #elem_main is each tr
    elem0 = elem_main.getchildren()[0] #td[0]
    elem1 = elem_main.getchildren()[1] #td[1]

    elem0 = elem_main.getchildren()[0]
    print elem0.text

    elem1 = elem_main.getchildren()[1]
    print elem1.text

Der obige Code nicht ausgeben elem0.text; es ist leer. Ich sehe die elem1.text (das heißt, tttttk ) in der Ausgabe.

Update 2

Ich baue eigentlich ein Wörterbuch. Der Text aus dem Elemente mit jedem so, dass ich die HTML-Tabelle sortieren. Wie würde ich die s in diesem Code erhalten?

War es hilfreich?

Lösung

Wie wäre es die getiterator Methode iterate durch die alle absteigenden Knoten mit:

import xml.etree.ElementTree as xee

content='''
<tr>
  <td><a href="sdas3">something for link</a></td>
  <td>tttttk</td>
  <td><a href="tyty">tyt for link</a></td>
</tr>
'''

def text_content(node):
    result=[]
    for elem in node.getiterator():
        text=elem.text
        if text and text.strip():
            result.append(text)
    return result

container_trs=xee.fromstring(content)
adict={}
for elem in container_trs:
    adict[elem]=text_content(elem)
print(adict)
# {<Element td at b767e52c>: ['tttttk'], <Element td at b767e58c>: ['tyt for link'], <Element td at b767e36c>: ['something for link']}

Die Schleife for elem_main in container_trs: iteriert durch die Kinder cantainer_trs.

Im Gegensatz dazu ist die Schleife for elem_main in container_trs.getiterator(): iteraters durch container_trs selbst und seine Kinder und Enkelkinder, etc.

scroll top