我希望將以下值與 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>我準(zhǔn)備的代碼似乎只為每條記錄標(biāo)識了帶有標(biāo)記 993 的第一項(xiàng)。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有沒有辦法循環(huán)使用元素樹的xpath搜索多個屬性?提前感謝您。
2 回答

FFIVE
TA貢獻(xiàn)1797條經(jīng)驗(yàn) 獲得超6個贊
要完成用戶3091877的答案,請備用 XPath 選項(xiàng):
//*[name()="subfield"][@code="a"][parent::*[@tag="993"]]/text()
編輯:這個將返回6個值(@tag = 993和@ind1 = 3):
//*[name()="subfield"][parent::*[@tag="993" and @ind1="3"]]/text()

慕碼人8056858
TA貢獻(xiàn)1803條經(jīng)驗(yàn) 獲得超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
添加回答
舉報(bào)
0/150
提交
取消