如何使用 ElementTree 从 xml 中提取 python 中“xml:id”的值到数据框中

问题描述 投票:0回答:1

我目前正在将书目信息从 XML 结构整理为几乎任何其他可用的内容。我的最后一步是提取“xml:id”属性的值并将其添加到我的漂亮数据框中。我在 ElementTree 中和 python 中的 pandas 中都运行良好。

例如:我想从下面的 biblStruct 中提取“Kakawa2014”:

<biblStruct type="book" xml:id="Kagawa2014" corresp="http://zotero.org/users/local/fmahZILk/items/EAK64XAU">
    <monogr>
#blahblah
    </monogr>
</biblStruct>

我尝试了一些在堆栈溢出时发现的东西:

for biblStruct in root.findall('.//tei:biblStruct', namespace):
    id_elem = biblStruct.attrib('xml:id')

并收到TypeError:“dict”对象不可调用 我对此抱有很大的希望:

for biblStruct in root.findall('.//tei:biblStruct', namespace):
    id_elem = biblStruct.get('{http://w3.org/XML/1998/namespace}id')
    id_text = id_elem.text if id_elem is not None else ''
    xmlID.append(id_text)

    
data = {
    'XML_ID':xmlID
    }
df = pd.DataFrame(data)
print(df)

这返回了一个 DF,它刚刚计算了 biblStructs(正确的数字)(即 0,1,2,3,4 等) 还有:

for biblStruct in root.findall('.//tei:biblStruct', namespace):
    id_elem = biblStruct.get('{http://w3.org/XML/1998/namespace}id')
    xmlID.append(id_elem)

    
data_again = {
    'XML_ID': xmlID
    }
df_again = pd.DataFrame(data_again)
print(df_again)

这返回了与上面类似的 DF,只是现在,数量是原来的两倍!就像魔法一样。

python pandas xml xml-parsing elementtree
1个回答
0
投票

这个问题很难回答。不是因为它很复杂,而是因为您的示例(XML 和 Python)不完整,因此我们无法运行您拥有的示例。我们没有最小且可重复的样本;我们必须从头开始。

我离题了...

您想要获取的是属性值。不是元素值(因此不会有任何

.text
属性)。

您(可能)接近最初的尝试(未经测试,因为我没有时间从头开始)。

.attrib
是一本字典,因此您可以像字典一样访问它......

for biblStruct in root.findall('.//tei:biblStruct', namespace):
    id_attr = biblStruct.attrib['{http://www.w3.org/XML/1998/namespace}id']

或者(我认为更好)...

id_attr = biblStruct.get('{http://www.w3.org/XML/1998/namespace}id')
© www.soinside.com 2019 - 2024. All rights reserved.