سؤال

أنا أستخدم ElementTree ولا يمكنني معرفة ما إذا كان نهر الأطفال هو نص أم لا. childelement.text لا يبدو أنه يعمل لأنه يعطي إيجابية زائفة حتى على العقد التي لا هي العقد النصية.

أي اقتراحات؟

مثال

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

بعد تحليل ملف XML هذا ، أقوم بذلك في 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

الرمز أعلاه لا يخرج elem0.text ؛ إنه فارغ. أرى النص elem1.tex TTTTTK) في الإخراج.

تحديث 2

أنا في الواقع بناء قاموس. النص من العنصر مع كل حتى أتمكن من فرز جدول HTML. كيف يمكنني الحصول على S في هذا الرمز؟

هل كانت مفيدة؟

المحلول

ماذا عن استخدام getiterator طريقة للتكرار من خلال جميع العقد النسل:

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']}

الحلقة for elem_main in container_trs: يتكرر من خلال أطفال cantainer_trs.

في المقابل ، الحلقة for elem_main in container_trs.getiterator(): التكرار من خلال container_trs نفسها ، وأطفالها ، وأبدهم ، إلخ.

نصائح أخرى

elem0.text لا شيء لأن النص هو في الواقع جزء من u003Ca>العنوان الفرعية. فقط اذهب إلى مستوى واحد أعمق:u003C/a>

print elem0.getchildren()[0].text

بالمناسبة، elem0[0].text هو اختصار لنفس البناء - لا حاجة ل getchildren ().

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top