我正在使用ElementTree,无法确定childnode是否为text。 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?
答案 0 :(得分: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
本身及其子女和孙子等。
答案 1 :(得分:1)
elem0.text
为无,因为该文字实际上是&lt; a&gt;的一部分。子元素。只需深入一级:
print elem0.getchildren()[0].text
顺便说一下,elem0[0].text
是同一个构造的快捷方式 - 不需要getchildren()。