这是一个返回无值的XML解析器代码段。这是一个很大的XML文件,有很多子字段,如下所示:
<root>
<field name ="1">
<field name ="2" showname ="ZZZ">
<field name ="3" showname="YYY">
<field name ="4" showname="XXX"/>
</field>
</field>
</field>
findall()
查找所有带有标记的元素,这些标记是当前元素的直接子元素。我试过这个,但没有结果。它也不打印任何东西。你知道吗
def findXXX(field):
if field.get('name') == 'XXX' :
return field.get('showname')
else:
for fieldchild in field.findall('field'):
return findXXX(fieldchild)
如果我这样写的话,它会打印正确的值,但是返回时没有。你知道吗
def findXXX(field):
if field.get('name') == 'XXX' :
print field.get('showname')
return field.get('showname')
else:
for fieldchild in field.findall('field'):
findXXX(fieldchild)
我可以建议你用美素吗。它易学,有很好的文档。http://www.crummy.com/software/BeautifulSoup/bs4/doc/
可以使用下面的代码实例化soup对象,其中“markup”是包含XML的字符串,或XML文件的输入文件句柄:
在第二个版本中,您将忽略递归调用的返回值。您的第一个版本至少仍返回该返回值:
函数中的
return
语句返回给直接调用方,而不是最外层的第一次调用findXXX()
的调用方。你知道吗但是现在只有
field.findall()
列表中第一个field
的结果会返回一些东西。您可能希望返回第一个而不是None
:这将启动对每个
field
元素的递归搜索,并返回不是None
的第一个此类递归调用的结果。你知道吗请注意,您没有要递归的;也可以使用XPath expression在树中搜索,而不必自己递归:
这将返回第一个
field
标记,其name
属性设置为XXX
,递归搜索。你知道吗演示:
相关问题 更多 >
编程相关推荐