我有大约XML
个由以下xml struct 的许多代表组成:
<record>
<header>
<identifier>oai:dnb.de/dnb:reiheO/1254645608</identifier><datestamp>2022-04-01T23:49:32Z</datestamp>
<setspec>dnb:reiheO</setspec>
</header>
<metadata>
<dc xmlns="http://www.openarchives.org/OAI/2.0/oai_dc/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dnb="http://d-nb.de/standards/dnbterms" xmlns:tel="http://krait.kb.nl/coop/tel/handbook/telterms.html">
<dc:title>Advantages of Simultaneous In Situ Multispecies Detection for Portable Emission Measurement Applications / Luigi Biondo, Henrik Gerken, Lars Illmann, Tim Steinhaus, Christian Beidl, Andreas Dreizler, Steven Wagner</dc:title>
<dc:creator>Biondo, Luigi Verfasser]</dc:creator>
<dc:creator>Gerken, Henrik [Verfasser]</dc:creator>
<dc:creator>[Illmann, Lars [Verfasser]</dc:creator>
<dc:creator>Steinhaus, Tim [Verfasser]</dc:creator>
<dc:creator>Beidl, Christian [Verfasser]</dc:creator>
<dc:creator>Dreizler, Andreas [Verfasser]</dc:creator>
<dc:creator>Wagner, Steven [Verfasser]</dc:creator>
<dc:publisher>Darmstadt : Universitäts- und Landesbibliothek</dc:publisher>
<dc:date>2022</dc:date>
<dc:language>eng</dc:language>
<dc:identifier xsi:type="tel:URN">urn:nbn:de:tuda-tuprints-210508</dc:identifier>
<dc:identifier xsi:type="tel:URL">http://nbn-resolving.de/urn:nbn:de:tuda-tuprints-210508</dc:identifier>
<dc:identifier xsi:type="tel:URL">http://d-nb.info/1254645608/34</dc:identifier>
<dc:identifier xsi:type="tel:URL">http://tuprints.ulb.tu-darmstadt.de/21050/</dc:identifier>
<dc:identifier xsi:type="dnb:IDN">1254645608</dc:identifier>
<dc:subject>670 Industrielle und handwerkliche Fertigung</dc:subject>
<dc:rights>lizenzfrei</dc:rights>
<dc:type>Online-Ressource</dc:type>
</dc>
</metadata>
</record>
能够处理大多数元素并提取其中的信息,但无法到达我必须定义属性的特定元素.我想我正在和xpath
人作斗争,但不太明白为什么.
如果我try 这段代码,我确实会得到一个元素列表,但它是空的:
urn = xml.find_all('.//dc:identifier[@xsi:type="tel:URN"]', namespaces=ns)
对于不太具体的版本也会发生同样的情况:
urn = xml.find_all('.//dc:identifier', namespaces=ns)
然而,这段代码: test1 = xml.find_all("dc:identifier")
工作并返回一个可爱的元素列表,但显然不仅仅是指定为urn的标识符列表.
但是这个:urn = xml.find_all('dc:identifier[@xsi:type="tel:URN"]', namespaces=ns)
再次返回一个空列表.无论我try 什么组合,我要么得到一个空列表,要么根本不起作用.
有没有人知道为什么会这样,或者我可以try 其他什么?获取所有ID的列表,但却无法从xsi:type中 Select 所需的ID,这太令人沮丧了...
编辑:
我通过OAI获取数据,使用以下库,使用requests
和BeautifulSoup
.我也试过ElementTree
和lxml
.
我实际上只是将来自API的响应存储在一个名为"xml"的变量中,然后try 以下代码,其中一些代码有效,一些代码无效:
ids = xml.find_all("identifier")[0].text
print(ids)
urn1 = xml.find_all("dc:identifier")
urn1 = urn1[0].text
print(urn1)
test1 = xml.find_all("dc:identifier")
print(test1)
urn2 = xml.find_all(".//dc:identifier")
print(urn2)
urn3 = xml.find_all("dc:identifier[@xsi:type='tel:URN']")
print(urn3)
前两部分按预期返回元素的文本(我知道第一部分是标题中的独立元素,而不是第一个dc:identifier对象,这只是用于测试目的),第三部分返回所有元素的列表.另一方面,最后两个返回空列表,这就是问题所在(因为我需要在上次try 中指定的特定xsi:type元素.