为了账号安全,请及时绑定邮箱和手机立即绑定

如何在元素树中使用 xpath 搜索多个属性

如何在元素树中使用 xpath 搜索多个属性

元芳怎么了 2022-09-27 15:15:09
我希望将以下值与 XML 文件隔离开来(https://digitallibrary.un.org/search?ln=en&p=A/RES/72/266&f=&rm=&ln=en&sf=&so=d&rg=50&c=United+Nations+Digital+Library+System&of=xm&fti=0&fti=0)。<collection>  <record>    ...    <datafield tag="993" ind1="2" ind2=" ">      <subfield code="a">A/C.5/72/L.22</subfield> # Value to isolate: A/C.5/72/L.22    </datafield>    <datafield tag="993" ind1="3" ind2=" ">      <subfield code="a">A/72/682</subfield> # Value to isolate: A/72/682    </datafield>    <datafield tag="993" ind1="4" ind2=" ">      <subfield code="a">A/72/PV.76</subfield> # Value to isolate: A/72/PV.76    </datafield>    ...  </record>  <record>    ...    <datafield tag="993" ind1="2" ind2=" ">      <subfield code="a">A/C.5/72/L.22</subfield> # Value to isolate: A/C.5/72/L.22    </datafield>    <datafield tag="993" ind1="3" ind2=" ">      <subfield code="a">A/72/682</subfield> # Value to isolate: A/72/682    </datafield>  </record>  ...</collection>我准备的代码似乎只为每条记录标识了带有标记 993 的第一项。for record in root:  if record.find("{http://www.loc.gov/MARC21/slim}datafield[@tag='993']/{http://www.loc.gov/MARC21/slim}subfield[@code='a']") is not None:    symbol = record.find("{http://www.loc.gov/MARC21/slim}datafield[@tag='993']/{http://www.loc.gov/MARC21/slim}subfield[@code='a']").text    print symbol有没有办法循环使用元素树的xpath搜索多个属性?提前感谢您。
查看完整描述

2 回答

?
FFIVE

TA贡献1797条经验 获得超6个赞

要完成用户3091877的答案,请备用 XPath 选项:

//*[name()="subfield"][@code="a"][parent::*[@tag="993"]]/text()

编辑:这个将返回6个值(@tag = 993和@ind1 = 3):

//*[name()="subfield"][parent::*[@tag="993" and @ind1="3"]]/text()


查看完整回答
反对 回复 2022-09-27
?
慕码人8056858

TA贡献1803条经验 获得超6个赞

文档显示 仅获取第一个匹配的子元素。听起来像你想要..find().findall()


以下似乎对我有用:


import xml.etree.ElementTree as ET

tree = ET.parse(input_file)

root = tree.getroot()


for record in root:

    xpath = "{http://www.loc.gov/MARC21/slim}datafield[@tag='993']/{http://www.loc.gov/MARC21/slim}subfield[@code='a']"

    if record.findall(xpath) is not None:

        for symbol in record.findall(xpath):

            print symbol.text


查看完整回答
反对 回复 2022-09-27
  • 2 回答
  • 0 关注
  • 131 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号