Python-Jupyter中解析带命名空间的XML标签无结果,求助
解决XML解析无结果的问题
你的代码解析XML无结果,主要有两个问题:
- 错误使用属性选择器:代码里的
[@name='ed:SID']是在找**带有name属性且值为ed:SID**的元素,但实际XML里的<ed:SID>是一个元素标签,不是属性,这是核心错误。 - 忽略XML命名空间:XML中的
ed:是命名空间前缀,对应的URL是http://mail.yahoo.com/d/folders/1,解析时必须指定这个命名空间映射,否则无法识别对应元素。
正确的Python解析代码
import xml.etree.ElementTree as ET # 假设你已经解析XML得到root节点,比如从文件读取: # tree = ET.parse("your_file.xml") # root = tree.getroot() # 或者直接解析XML字符串: xml_str = """<data> <row> <document> <doc:document xmlns:ed="http://mail.yahoo.com/d/folders/1" xmlns:reslvd="http://mail.yahoo.com/d/folders/1/234" xmlns:ct="http://mail.yahoo.com/d/folders/cool/storybro" xmlns:doc="http://mail.yahoo.com/d/folders/nice/alldone"> <ed:EI> <ed:SID>9865-346</ed:SID> </doc:document> </document> </row> </data>""" root = ET.fromstring(xml_str) # 定义命名空间映射,前缀对应XML里的命名空间URL namespaces = {"ed": "http://mail.yahoo.com/d/folders/1"} x = [] # 使用命名空间前缀查找所有层级下的ed:SID元素 for value in root.findall(".//ed:SID", namespaces=namespaces): x.append(value.text) print(x) # 输出: ['9865-346']
关键说明
- 必须通过
namespaces参数将前缀ed和对应的URL绑定,解析器才能识别XML中的ed:前缀元素。 .//ed:SID路径表示查找所有层级下的ed:SID元素,精准匹配你要提取的目标内容。
内容的提问来源于stack exchange,提问作者CoolStoryBro
相关产品推荐
相关产品推荐

