2017-07-21 1 views
0

je veux lire l'entrée entrexml parsing Python/fichier OPF

<dc:title> </dc:title> 

Ceci est xml:

<?xml version='1.0' encoding='utf-8'?> 
<package xmlns="http://www.idpf.org/2007/opf" version="2.0" unique-identifier="calibre-uuid"> 
<metadata xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:opf="http://www.idpf.org/2007/opf" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:calibre="http://calibre.kovidgoyal.net/2009/metadata" xmlns:dc="http://purl.org/dc/elements/1.1/"> 
<meta name="calibre:series_index" content="1"/> 
<dc:language>UND</dc:language> 
<dc:creator opf:file-as="Unbekannt" opf:role="aut">Johann Wolfgang von Goethe</dc:creator> 
<meta name="calibre:timestamp" content="2009-10-08T07:26:21"/> 
<dc:title>Faust_I_</dc:title> 
<meta name="cover" content="cover"/> 
<dc:date>2009-10-08T07:26:21</dc:date> 
<dc:contributor opf:role="bkp">calibre (0.6.13) [http://calibre-ebook.com]</dc:contributor> 
<dc:identifier id="calibre-uuid">urn:uuid:3cd4b26f-39a3-4783-9730-a86c26b30818</dc:identifier> 

Et qui est mon code:

from xml.etree import ElementTree as ET 
tree = ET.parse('content.opf') 
root = tree.getroot() 
dc_namespace = "http://purl.org/dc/elements/1.1/" 
print (root.attrib[ET.QName(dc_namespace, 'title')]) 

Erreur de sortie:

Traceback (most recent call last): 
File "C:\Users\User\Documents\Visual Studio 2017\Projects\PythonApplication1\Modul1.py", line 8, in <module> 
print (root.attrib[ET.QName(dc_namespace, 'title')]) 
KeyError: <QName '{xmlns:dc}title'> 

Qu'est-ce qui ne va pas?

+0

quel est votre Erro actuelle r/sortie? – MattR

+0

Erreur de sortie ajoutée. – aquisic

+0

Il manque un ou deux tags de fin dans votre fichier XML. – mzjn

Répondre

0

vous pouvez utiliser:

root[number][number] 

pour accéder aux éléments. par exemple dans

<base> 
    <element1> 
     <element2>asdada</element2> 
    </element> 
</base> 

racine [0] [0] donnera élément u 2

+0

Oui, je l'ai utilisé avant, mais ce n'est pas toujours le même numéro d'élément mais à chaque fois le même tag () – aquisic

+0

Vous pouvez utiliser minidom. – krishnair1123

0

Ce que vous cherchez (<dc:title>) est un élément, pas un attribut. Voici comment vous pouvez obtenir sa valeur:

from xml.etree import ElementTree as ET 

tree = ET.parse('content.opf') 
title = tree.find(".//{http://purl.org/dc/elements/1.1/}title") 
print(title.text) 

sortie:

Faust_I_ 

références pertinentes: