1

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.text (つまりtttttk ) が表示されます。

更新 2

私は実際に辞書を作成しています。HTML テーブルを並べ替えることができるように、それぞれの要素からのテキスト。このコードで s を取得するにはどうすればよいですか?

4

2 に答える 2

1

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

于 2010-08-31T18:09:23.043 に答える
1

elem0.textテキストは実際には <a> サブ要素の一部であるため、None はありません。1 レベル深く進むだけです。

print elem0.getchildren()[0].text

ちなみに、elem0[0].textは同じ構造のショートカットです。getchildren() は必要ありません。

于 2010-08-31T18:32:13.747 に答える