您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

如何使用Python XML findall查找“'

如何使用Python XML findall查找“'

ET.findall()vs BS4.find_all()

但是,ElementTree.iter()会 。使用docs中“使用命名空间”示例

>>> for char in root.iter('{http://characters.example.com}character'):

… print(‘ |–>’, char.text) … |–> Lancelot |–> Archie Leach |–> Sir Robin |–> Gunther |–> Commander Clement

可悲的是,ET.iterfind()它使用命名空间作为dict(例如ET.findall),也 , 认情况下 仅引导子对象 * 。就像ET.findall。除了如何''使用名称空间处理标记中的空字符串,一个返回列表,另一个返回迭代器,我不能说ET.findalland之间存在有意义的区别ET.iterfind

当将名称空间与ET一起使用时,仍然需要带有标签名称空间名称 。结果行应为:

namespace = {'v': "urn:schemas-microsoft-com:vml"}
results = ET.fromstring(xml).findall("v:imagedata", namespace)  # note the 'v:'

另外,'v'不必是'v',您可以根据需要将其更改为更有意义的名称

namespace = {'image': "urn:schemas-microsoft-com:vml"}
results = ET.fromstring(xml).findall("image:imagedata", namespace)

当然,如果它们不是根的直接子代,那么仍然不一定能为您提供所有imagedata元素。 为此,您需要创建 一个递归 函数来为您执行此操作。请注意,而答案不递归 搜索,你很可能会击中Python的递归限制,如果后代深度过......

获取树中任何位置的所有imagedata元素,请使用".//"前缀:

results = ET.fromstring(xml).findall(".//v:imagedata", namespace)
python 2022/1/1 18:43:57 有302人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶