无法使用 elementtree.find() 找到子叶子
Can't find children leafs using elementtree.find()
我想从下面的 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
来自 etree 文档
find(match)
Finds the first subelement matching match. match may be a tag name or path. Returns an element instance or None.
所以你应该尝试 xpath。
这应该有效:
print(root.find('.//{http://www.mediawiki.org/xml/export-0.10/}title').text)
我想从下面的 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
来自 etree 文档
find(match) Finds the first subelement matching match. match may be a tag name or path. Returns an element instance or None.
所以你应该尝试 xpath。
这应该有效:
print(root.find('.//{http://www.mediawiki.org/xml/export-0.10/}title').text)