J'ai du XML
qui se compose de nombreuses répétitions de la structure XML suivante :
oai:dnb.de/dnb:reiheO/12546456082022-04-01T23:49:32Z
dnb:reiheO
Avantages de la détection simultanée in situ de plusieurs espèces pour les applications de mesure des émissions portables / Luigi Biondo, Henrik Gerken, Lars Illmann, Tim Steinhaus, Christian Beidl, Andreas Dreizler, Steven Wagner
Biondo, Luigi Verfasser]
Gerken, Henrik [Verfasser]
[Illmann, Lars [Verfasser]
Steinhaus, Tim [Verfasser]
Beidl, Christian [Verfasser]
Dreizler, Andreas [Verfasser]
Wagner, Steven [Verfasser]
Darmstadt : Universitäts- und Landesbibliothek
2022
eng
urn:nbn:de:tuda-tuprints-210508
http://nbn-resolving.de/urn:nbn:de:tuda-tuprints-210508
http://d-nb.info/1254645608/34
http://tuprints.ulb.tu-darmstadt.de/21050/
1254645608
670 Industrielle und handwerkliche Fertigung
lizenzfrei
Online-Ressource
Capable d'adresser la plupart des éléments et d'extraire les informations à l'intérieur, mais ayant du mal à accéder aux éléments spécifiques où je dois définir l'attribut également. Je pense avoir du mal avec xpath
, mais je n'arrive pas vraiment à comprendre pourquoi.
Si j'essaie ce code, j'obtiens bien une liste d'éléments, mais elle est vide :
urn = xml.find_all('.//dc:identifier[@xsi:type="tel:URN"]', namespaces=ns)
Il se passe la même chose pour la version moins spécifique :
urn = xml.find_all('.//dc:identifier', namespaces=ns)
Cependant, ce code : test1 = xml.find_all("dc:identifier")
fonctionne et renvoie une belle liste d'éléments, mais évidemment pas seulement des identifiants spécifiés comme urn.
Mais celui-ci : urn = xml.find_all('dc:identifier[@xsi:type="tel:URN"]', namespaces=ns)
renvoie de nouveau une liste vide. Et quelle que soit la combinaison que j'essaie, j'obtiens soit une liste vide, soit rien ne fonctionne du tout.
Quelqu'un a-t-il une idée de pourquoi c'est le cas ou que pourrais-je essayer d'autre ? C'est tellement frustrant d'obtenir cette liste de tous les identifiants mais de ne pas réussir à sélectionner celui dont j'ai besoin à partir du xsi:type...
MISE À JOUR :
Je récupère les données via OAI et j'utilise les bibliothèques suivantes et j'utilise requests
et BeautifulSoup
. J'ai également essayé ElementTree
et lxml
.
Je stocke littéralement la réponse de l'API dans une variable appelée "xml" et ensuite j'essaie le code suivant, dont une partie fonctionne et une autre non :
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)
Les deux premiers renvoient le texte de l'élément comme prévu (je sais que le premier est l'élément isolé dans l'en-tête, pas le premier objet dc:identifier, cela servait juste à des fins de test), la troisième partie renvoie la liste de tous les éléments. Les deux derniers, en revanche, renvoient une liste vide, et c'est le problème (car j'ai besoin de l'élément xsi:type spécifique spécifié dans la dernière tentative).