python - 使用 Python 从 ORCID XML 文件中提取数据
问题描述
我正在尝试(离线)使用 Python 解析 ORCID XML 文件中的名称,该文件从以下位置下载:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<record:record xmlns:internal="http://www.orcid.org/ns/internal" xmlns:address="http://www.orcid.org/ns/address" xmlns:email="http://www.orcid.org/ns/email" xmlns:history="http://www.orcid.org/ns/history" xmlns:employment="http://www.orcid.org/ns/employment" xmlns:person="http://www.orcid.org/ns/person" xmlns:education="http://www.orcid.org/ns/education" xmlns:other-name="http://www.orcid.org/ns/other-name" xmlns:personal-details="http://www.orcid.org/ns/personal-details" xmlns:bulk="http://www.orcid.org/ns/bulk" xmlns:common="http://www.orcid.org/ns/common" xmlns:record="http://www.orcid.org/ns/record" xmlns:keyword="http://www.orcid.org/ns/keyword" xmlns:activities="http://www.orcid.org/ns/activities" xmlns:deprecated="http://www.orcid.org/ns/deprecated" xmlns:external-identifier="http://www.orcid.org/ns/external-identifier" xmlns:funding="http://www.orcid.org/ns/funding" xmlns:error="http://www.orcid.org/ns/error" xmlns:preferences="http://www.orcid.org/ns/preferences" xmlns:work="http://www.orcid.org/ns/work" xmlns:researcher-url="http://www.orcid.org/ns/researcher-url" xmlns:peer-review="http://www.orcid.org/ns/peer-review" path="/0000-0001-5006-8001">
<common:orcid-identifier>
<common:uri>http://orcid.org/0000-0001-5006-8001</common:uri>
<common:path>0000-0001-5006-8001</common:path>
<common:host>orcid.org</common:host>
</common:orcid-identifier>
<preferences:preferences>
<preferences:locale>en</preferences:locale>
</preferences:preferences>
<person:person path="/0000-0001-5006-8001/person">
<common:last-modified-date>2016-06-06T15:29:36.952Z</common:last-modified-date>
<person:name visibility="public" path="0000-0001-5006-8001">
<common:created-date>2016-04-15T20:45:16.141Z</common:created-date>
<common:last-modified-date>2016-04-15T20:45:16.141Z</common:last-modified-date>
<personal-details:given-names>Marjorie</personal-details:given-names>
<personal-details:family-name>Biffi</personal-details:family-name>
</person:name>
我想要的是提取名字和姓氏:Marjorie Biffi。我正在尝试使用此代码:
>>> import xml.etree.ElementTree as ET
>>> root = ET.parse('f.xml').getroot()
>>> p=root.findall('{http://www.orcid.org/ns/personal-details}personal-details')
>>> p
[]
我不知道如何从这个 XML 文件中提取姓名/姓氏。我也在尝试使用 XPath/Selector,但没有成功。
解决方案
这将为您提供您想要的结果,但要通过每一个爬升。
p1 = root.find('{http://www.orcid.org/ns/person}person')
name = p1.find('{http://www.orcid.org/ns/person}name')
given_names = name.find('{http://www.orcid.org/ns/personal-details}given-names')
family_name = name.find('{http://www.orcid.org/ns/personal-details}family-name')
print(given_names.text, '', family_name.text)
您也可以直接进入该子级别.\\
family_name = root.find('.//{http://www.orcid.org/ns/personal-details}family-name')
此外,如果您正在执行更多基本操作,我刚刚在此处发布了有关通过 xml 解析的更简单方法。这些包括xmltodict
(转换为 OrderedDict)或untangle
效率低但非常快速且易于学习的方法。
推荐阅读
- ios - 如何为视图设置最大高度约束?
- amazon-web-services - Invoke-RestMethod 上传文件到 s3
- c# - 搜索关键导航属性是 O(1)?
- python - 从列表中删除在另一个列表中出现的元素与它们在另一个列表中出现的次数一样多
- r - 在 r 中初始化 h2o 花费的时间太长
- ios - 如何使另一个视图的颜色在 iOS 的导航栏后面流血?
- angular - 我应该如何使用 Angular 6 处理我的动态复选框
- c - 无法插入断点。低值地址
- entity-framework - EFCore 脚手架
- bash - 有没有办法在一行中执行 grep、awk、应用变量,而不是像我的示例中的 3 行?