Python解析xml / opf文件

时间:2017-07-21 12:33:25

标签: python xml elementtree

我想阅读

之间的条目
<dc:title> </dc:title>

这是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>

  

那是我的代码:

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')])

输出错误:

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'>

出了什么问题?

2 个答案:

答案 0 :(得分:2)

您正在寻找的内容(Last_6_Month Last_5_Month Last_4_Month Last_3_Month Last_2_Month Last_1_Month ------------ ------------ ------------ ------------ ------------ ------------ 13 10 9 8 7 4 )是一个元素,而不是一个属性。以下是如何获得其价值的方法:

<dc:title>

输出:

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)

相关参考文献:

答案 1 :(得分:0)

你可以使用:

root[number][number]

访问元素。 例如在

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

root [0] [0]将给出u元素2