使用Pandas读取XML时如何同时获取xlink:label属性与元素文本?
解决Pandas读取XML时同时获取xlink:label属性与元素文本的问题
问题原因
你遇到的情况是因为XML中存在xlink命名空间,且元素名<link:label>与属性xlink:label同名,Pandas默认解析时将元素文本映射到了label列,而未正确提取带命名空间的xlink:label属性。
解决方案
需要显式指定XML的命名空间,让Pandas正确识别并提取所有属性,同时将元素文本保留在单独列中:
- 定义命名空间字典:对应XML中的
link和xlink命名空间(URI为XBRL标准定义值) - 调整
pd.read_xml参数:传入命名空间,确保解析器提取命名空间属性,同时保留元素文本
代码示例
import pandas as pd # 定义XML命名空间 namespaces = { 'link': 'http://www.xbrl.org/2003/linkbase', 'xlink': 'http://www.w3.org/1999/xlink' } # 读取XML并提取所有属性与文本 label_df = pd.read_xml( open(filing_lab), namespaces=namespaces, xpath="//link:label", elems_only=False, parser='lxml' # 需先安装lxml:pip install lxml ) # 重命名列,区分属性与文本 label_df.rename(columns={ 'text': 'label_text', 'xlink_label': 'xlink_label' }, inplace=True)
预期输出
修改后生成的DataFrame将包含所有所需字段:
lang type xlink_label role label_text 0 en-US resource us-gaap_TradeNamesMember_lbl http://www.xbrl.org/2003/role/label Trade Names [Member]
补充说明
lxml对XML命名空间的解析支持更完善,需提前安装elems_only=False确保Pandas提取元素的所有属性,而非仅子元素- 重命名列是为了避免混淆
xlink:label属性值与元素文本内容
内容的提问来源于stack exchange,提问作者Jasper
相关产品推荐
相关产品推荐

