我想从下面的xml文件的最后一行输出文本“Det norske Arbeiderparti”。我正在使用此代码,但我收到错误:
import xml.etree.ElementTree as ET
tree = ET.parse('wiki.xml')
root = tree.getroot()
print(root.find('{http://www.mediawiki.org/xml/export-0.10/}title').text)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'NoneType' object has no attribute 'text'
这是XML:
<mediawiki xmlns="http://www.mediawiki.org/xml/export-0.10/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mediawiki.org/xml/export-0.10/ http://www.mediawiki.org/xml/export-0.10.xsd" version="0.10" xml:lang="nb">
<siteinfo>
<sitename>Wikipedia</sitename>
<dbname>nowiki</dbname>
<base>https://no.wikipedia.org/wiki/Portal:Forside</base>
<generator>MediaWiki 1.31.0-wmf.12</generator>
<case>first-letter</case>
<namespaces>
<namespace key="-2" case="first-letter">Medium</namespace>
<namespace key="-1" case="first-letter">Spesial</namespace>
<namespace key="0" case="first-letter" />
<namespace key="1" case="first-letter">Diskusjon</namespace>
<namespace key="2" case="first-letter">Bruker</namespace>
<namespace key="3" case="first-letter">Brukerdiskusjon</namespace>
<namespace key="4" case="first-letter">Wikipedia</namespace>
<namespace key="5" case="first-letter">Wikipedia-diskusjon</namespace>
<namespace key="6" case="first-letter">Fil</namespace>
<namespace key="7" case="first-letter">Fildiskusjon</namespace>
<namespace key="8" case="first-letter">MediaWiki</namespace>
<namespace key="9" case="first-letter">MediaWiki-diskusjon</namespace>
<namespace key="10" case="first-letter">Mal</namespace>
<namespace key="11" case="first-letter">Maldiskusjon</namespace>
<namespace key="12" case="first-letter">Hjelp</namespace>
<namespace key="13" case="first-letter">Hjelpdiskusjon</namespace>
<namespace key="14" case="first-letter">Kategori</namespace>
<namespace key="15" case="first-letter">Kategoridiskusjon</namespace>
<namespace key="100" case="first-letter">Portal</namespace>
<namespace key="101" case="first-letter">Portaldiskusjon</namespace>
<namespace key="828" case="first-letter">Modul</namespace>
<namespace key="829" case="first-letter">Moduldiskusjon</namespace>
<namespace key="2300" case="first-letter">Gadget</namespace>
<namespace key="2301" case="first-letter">Gadget talk</namespace>
<namespace key="2302" case="case-sensitive">Gadget definition</namespace>
<namespace key="2303" case="case-sensitive">Gadget definition talk</namespace>
<namespace key="2600" case="first-letter">Sak</namespace>
</namespaces>
</siteinfo>
<page>
<title>Det norske Arbeiderparti</title>
我知道我的搜索名称是正确的,因为此代码会生成正确的名称:
print(root.getchildren()[1].getchildren())
<Element '{http://www.mediawiki.org/xml/export-0.10/}title' at 0x1101ff188>
我能找到我想要的唯一方法是使用这个代码,但我不能将它用于整个xml,因为名称位于不同的地方:
print(root.getchildren()[1].find('{http://www.mediawiki.org/xml/export-0.10/}title').text)
Det norske Arbeiderparti
答案 0 :(得分:1)
来自etree Documentation
查找(匹配) 查找第一个匹配匹配的子元素。 match可以是标签名称或路径。返回元素实例或None。
所以你应该试试xpath。
这应该有效:
print(root.find('.//{http://www.mediawiki.org/xml/export-0.10/}title').text)